These examples were created in release 3.4.0. Take care copy-pasting these examples into your version of GannetPreInitialise.m. You may be using a different release that has older/newer variables that could result in an error during the analysis pipeline.

GABA-edited MEGA-PRESS data

% Acquisition parameters
    MRS_struct.p.target = {'GABAGlx'}; % Edited metabolite(s) of interest; permitted options are:
                                       % If MEGA-PRESS:
                                       %   {'GABA'}, {'GABAGlx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       % If HERMES:
                                       %   {'GABAGlx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
                                       % If HERCULES:
                                       %   {'GABAGlx','GSH'}
                                       % If phantom data:
                                       %   and MEGA-PRESS: {'GABA'}, {'Glx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       %   and HERMES: {'GABA','GSH'}, {'Glx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
    MRS_struct.p.ON_OFF_order = []; % The editing order applied at acquisition.
                                    % If empty (the default: []), Gannet will determine the editing order automatically.
                                    % Otherwise, input 'offfirst' or 'onfirst' for MEGA-edited data;
                                    % or, for HERMES/HERCULES data, input a four-letter combination, such as 'ABCD' or 'CBAD', etc.
                                    % (see: doi:10.1016/j.neuroimage.2016.07.056)
    MRS_struct.p.seqorig = 'JHU'; % Origin of Philips MEGA-PRESS or GE HERMES sequences;
                                  % options are 'JHU' or 'Philips' if Philips, or 'Lythgoe' if GE (for HERMES only)
    
% Analysis parameters
    MRS_struct.p.LB            = 3; % Exponential line-broadening (in Hz); default = 3 Hz; for phantom data, ~1.5 Hz is recommended
    MRS_struct.p.water_ECC     = 1; % 1 = YES, perform eddy current correction on water data
    MRS_struct.p.metab_ECC     = 0; % 1 = YES, perform eddy current correction on metabolite data (requires a water reference)
    MRS_struct.p.water_removal = 1; % 1 = YES, remove residual water signal in the DIFF spectrum using HSVD
    MRS_struct.p.alignment     = 'RobustSpecReg'; % Alignment method; options are 'RobustSpecReg' (recommended), 'SpecReg', 'SpecRegHERMES',
                                                  % 'Cr', 'Cho', 'NAA', 'H2O', or 'none' (recommended for phantom data)
    MRS_struct.p.use_prealign_ref   = 0; % 1 = YES; in some cases, using RobustSpecReg to align HERMES/HERCULES data can result in
                                         % worse alignment compared to the pre-aligned data; setting this parameter to 1 will
                                         % make RobustSpecReg use the averaged pre-aligned subspectra as references to align the
                                         % averaged post-aligned subspectra, which may improve the final alignment
    MRS_struct.p.vox                = {'vox1'}; % For naming voxels, e.g., {'DLPFC'}; if data were acquired using PRIAM this could be,
                                                % e.g., {'anterior','posterior'}, {'right','left'}, etc.
    MRS_struct.p.fit_resid_water    = 0; % 1 = YES, fit the residual water signal in the OFF spectrum to calculate a water suppression factor
    MRS_struct.p.weighted_averaging = 1; % 1 = YES, average subspectra using weighted averaging; otherwise, use arithmetic averaging
    
% Flags(0 = NO; 1 = YES)
    MRS_struct.p.HERMES    = 0; % Data were acquired using HERMES
    MRS_struct.p.HERCULES  = 0; % Data were acquired using HERCULES; if 1, MRS_struct.p.HERMES must be set to 1 as well
    MRS_struct.p.PRIAM     = 0; % Data were acquired using PRIAM
    MRS_struct.p.phantom   = 0; % Data are from a phantom (assumes phantom was scanned at room temperature)
    MRS_struct.p.join      = 0; % Join multiple files (this can be performed in batch to join files across multiple subjects)
    MRS_struct.p.mat       = 0; % Save MRS_struct as a .mat file
    MRS_struct.p.csv       = 0; % Extract useful results from the output structure MRS_struct and export them to a .csv file (applies to
                                % GannetFit, GannetSegment, and GannetQuantify only)
    MRS_struct.p.normalize = 0; % If 1, the voxel masks created by GannetCoRegister and GannetSegment are normalized to MNI space
                                % and, if more than dataset has been run in the pipeline, a mean overlap voxel is created
                                % (note that this is only run if GannetSegment is run)
    MRS_struct.p.append    = 0; % Append PDF outputs into one PDF (separately for each module) (requires export_fig in the Gannet
                                % directory to be added to the search path and Ghostscript to be installed)
    MRS_struct.p.hide      = 0; % Do not display output figures

GABA-/GSH-edited HERMES data

% Acquisition parameters
    MRS_struct.p.target = {'GABAGlx','GSH'}; % Edited metabolite(s) of interest; permitted options are:
                                       % If MEGA-PRESS:
                                       %   {'GABA'}, {'GABAGlx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       % If HERMES:
                                       %   {'GABAGlx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
                                       % If HERCULES:
                                       %   {'GABAGlx','GSH'}
                                       % If phantom data:
                                       %   and MEGA-PRESS: {'GABA'}, {'Glx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       %   and HERMES: {'GABA','GSH'}, {'Glx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
    MRS_struct.p.ON_OFF_order = []; % The editing order applied at acquisition.
                                    % If empty (the default: []), Gannet will determine the editing order automatically.
                                    % Otherwise, input 'offfirst' or 'onfirst' for MEGA-edited data;
                                    % or, for HERMES/HERCULES data, input a four-letter combination, such as 'ABCD' or 'CBAD', etc.
                                    % (see: doi:10.1016/j.neuroimage.2016.07.056)
    MRS_struct.p.seqorig = 'JHU'; % Origin of Philips MEGA-PRESS or GE HERMES sequences;
                                  % options are 'JHU' or 'Philips' if Philips, or 'Lythgoe' if GE (for HERMES only)
    
% Analysis parameters
    MRS_struct.p.LB            = 3; % Exponential line-broadening (in Hz); default = 3 Hz; for phantom data, ~1.5 Hz is recommended
    MRS_struct.p.water_ECC     = 1; % 1 = YES, perform eddy current correction on water data
    MRS_struct.p.metab_ECC     = 0; % 1 = YES, perform eddy current correction on metabolite data (requires a water reference)
    MRS_struct.p.water_removal = 1; % 1 = YES, remove residual water signal in the DIFF spectrum using HSVD
    MRS_struct.p.alignment     = 'RobustSpecReg'; % Alignment method; options are 'RobustSpecReg' (recommended), 'SpecReg', 'SpecRegHERMES',
                                                  % 'Cr', 'Cho', 'NAA', 'H2O', or 'none' (recommended for phantom data)
    MRS_struct.p.use_prealign_ref   = 0; % 1 = YES; in some cases, using RobustSpecReg to align HERMES/HERCULES data can result in
                                         % worse alignment compared to the pre-aligned data; setting this parameter to 1 will
                                         % make RobustSpecReg use the averaged pre-aligned subspectra as references to align the
                                         % averaged post-aligned subspectra, which may improve the final alignment
    MRS_struct.p.vox                = {'vox1'}; % For naming voxels, e.g., {'DLPFC'}; if data were acquired using PRIAM this could be,
                                                % e.g., {'anterior','posterior'}, {'right','left'}, etc.
    MRS_struct.p.fit_resid_water    = 0; % 1 = YES, fit the residual water signal in the OFF spectrum to calculate a water suppression factor
    MRS_struct.p.weighted_averaging = 1; % 1 = YES, average subspectra using weighted averaging; otherwise, use arithmetic averaging
    
% Flags(0 = NO; 1 = YES)
    MRS_struct.p.HERMES    = 1; % Data were acquired using HERMES
    MRS_struct.p.HERCULES  = 0; % Data were acquired using HERCULES; if 1, MRS_struct.p.HERMES must be set to 1 as well
    MRS_struct.p.PRIAM     = 0; % Data were acquired using PRIAM
    MRS_struct.p.phantom   = 0; % Data are from a phantom (assumes phantom was scanned at room temperature)
    MRS_struct.p.join      = 0; % Join multiple files (this can be performed in batch to join files across multiple subjects)
    MRS_struct.p.mat       = 0; % Save MRS_struct as a .mat file
    MRS_struct.p.csv       = 0; % Extract useful results from the output structure MRS_struct and export them to a .csv file (applies to
                                % GannetFit, GannetSegment, and GannetQuantify only)
    MRS_struct.p.normalize = 0; % If 1, the voxel masks created by GannetCoRegister and GannetSegment are normalized to MNI space
                                % and, if more than dataset has been run in the pipeline, a mean overlap voxel is created
                                % (note that this is only run if GannetSegment is run)
    MRS_struct.p.append    = 0; % Append PDF outputs into one PDF (separately for each module) (requires export_fig in the Gannet
                                % directory to be added to the search path and Ghostscript to be installed)
    MRS_struct.p.hide      = 0; % Do not display output figures

Phantom GABA-edited MEGA-PRESS data

% Acquisition parameters
    MRS_struct.p.target = {'GABA'}; % Edited metabolite(s) of interest; permitted options are:
                                       % If MEGA-PRESS:
                                       %   {'GABA'}, {'GABAGlx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       % If HERMES:
                                       %   {'GABAGlx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
                                       % If HERCULES:
                                       %   {'GABAGlx','GSH'}
                                       % If phantom data:
                                       %   and MEGA-PRESS: {'GABA'}, {'Glx'}, {'GSH'}, {'Lac'}, or {'EtOH'}
                                       %   and HERMES: {'GABA','GSH'}, {'Glx','GSH'}, {'Lac','GSH'}, or {'EtOH','GABA','GSH'}
    MRS_struct.p.ON_OFF_order = []; % The editing order applied at acquisition.
                                    % If empty (the default: []), Gannet will determine the editing order automatically.
                                    % Otherwise, input 'offfirst' or 'onfirst' for MEGA-edited data;
                                    % or, for HERMES/HERCULES data, input a four-letter combination, such as 'ABCD' or 'CBAD', etc.
                                    % (see: doi:10.1016/j.neuroimage.2016.07.056)
    MRS_struct.p.seqorig = 'JHU'; % Origin of Philips MEGA-PRESS or GE HERMES sequences;
                                  % options are 'JHU' or 'Philips' if Philips, or 'Lythgoe' if GE (for HERMES only)
    
% Analysis parameters
    MRS_struct.p.LB            = 1.5; % Exponential line-broadening (in Hz); default = 3 Hz; for phantom data, ~1.5 Hz is recommended
    MRS_struct.p.water_ECC     = 1; % 1 = YES, perform eddy current correction on water data
    MRS_struct.p.metab_ECC     = 0; % 1 = YES, perform eddy current correction on metabolite data (requires a water reference)
    MRS_struct.p.water_removal = 1; % 1 = YES, remove residual water signal in the DIFF spectrum using HSVD
    MRS_struct.p.alignment     = 'none'; % Alignment method; options are 'RobustSpecReg' (recommended), 'SpecReg', 'SpecRegHERMES',
                                                  % 'Cr', 'Cho', 'NAA', 'H2O', or 'none' (recommended for phantom data)
    MRS_struct.p.use_prealign_ref   = 0; % 1 = YES; in some cases, using RobustSpecReg to align HERMES/HERCULES data can result in
                                         % worse alignment compared to the pre-aligned data; setting this parameter to 1 will
                                         % make RobustSpecReg use the averaged pre-aligned subspectra as references to align the
                                         % averaged post-aligned subspectra, which may improve the final alignment
    MRS_struct.p.vox                = {'vox1'}; % For naming voxels, e.g., {'DLPFC'}; if data were acquired using PRIAM this could be,
                                                % e.g., {'anterior','posterior'}, {'right','left'}, etc.
    MRS_struct.p.fit_resid_water    = 0; % 1 = YES, fit the residual water signal in the OFF spectrum to calculate a water suppression factor
    MRS_struct.p.weighted_averaging = 1; % 1 = YES, average subspectra using weighted averaging; otherwise, use arithmetic averaging
    
% Flags(0 = NO; 1 = YES)
    MRS_struct.p.HERMES    = 0; % Data were acquired using HERMES
    MRS_struct.p.HERCULES  = 0; % Data were acquired using HERCULES; if 1, MRS_struct.p.HERMES must be set to 1 as well
    MRS_struct.p.PRIAM     = 0; % Data were acquired using PRIAM
    MRS_struct.p.phantom   = 1; % Data are from a phantom (assumes phantom was scanned at room temperature)
    MRS_struct.p.join      = 0; % Join multiple files (this can be performed in batch to join files across multiple subjects)
    MRS_struct.p.mat       = 0; % Save MRS_struct as a .mat file
    MRS_struct.p.csv       = 0; % Extract useful results from the output structure MRS_struct and export them to a .csv file (applies to
                                % GannetFit, GannetSegment, and GannetQuantify only)
    MRS_struct.p.normalize = 0; % If 1, the voxel masks created by GannetCoRegister and GannetSegment are normalized to MNI space
                                % and, if more than dataset has been run in the pipeline, a mean overlap voxel is created
                                % (note that this is only run if GannetSegment is run)
    MRS_struct.p.append    = 0; % Append PDF outputs into one PDF (separately for each module) (requires export_fig in the Gannet
                                % directory to be added to the search path and Ghostscript to be installed)
    MRS_struct.p.hide      = 0; % Do not display output figures
LS0tCnRpdGxlOiAiR2FubmV0UHJlSW5pdGlhbGlzZSBzZXR0aW5ncyIKZGF0ZTogIkxhc3QgdXBkYXRlZDogYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiCm91dHB1dDogaHRtbF9kb2N1bWVudAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciwgY2hpbGQgPSAianMvYmFjay10by10b3AuanMifQpgYGAKCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KYm9keSAubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTIwMHB4Owp9CmBgYAoKPGJyPgoKOjo6IHdhcm5pbmcKPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSIgc3R5bGU9ImNvbG9yOiB3aGl0ZSI+PC9pPiZuYnNwOyBUaGVzZSBleGFtcGxlcyB3ZXJlIGNyZWF0ZWQgaW4gcmVsZWFzZSAzLjQuMC4gVGFrZSBjYXJlIGNvcHktcGFzdGluZyB0aGVzZSBleGFtcGxlcyBpbnRvIHlvdXIgdmVyc2lvbiBvZiBgR2FubmV0UHJlSW5pdGlhbGlzZS5tYC4gWW91IG1heSBiZSB1c2luZyBhIGRpZmZlcmVudCByZWxlYXNlIHRoYXQgaGFzIG9sZGVyL25ld2VyIHZhcmlhYmxlcyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBhbiBlcnJvciBkdXJpbmcgdGhlIGFuYWx5c2lzIHBpcGVsaW5lLgo6OjoKCiMjIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQoKIyMjIEdBQkEtZWRpdGVkIE1FR0EtUFJFU1MgZGF0YQoKYGBge29jdGF2ZSwgZXZhbCA9IEZBTFNFfQolIEFjcXVpc2l0aW9uIHBhcmFtZXRlcnMKICAgIE1SU19zdHJ1Y3QucC50YXJnZXQgPSB7J0dBQkFHbHgnfTsgJSBFZGl0ZWQgbWV0YWJvbGl0ZShzKSBvZiBpbnRlcmVzdDsgcGVybWl0dGVkIG9wdGlvbnMgYXJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIE1FR0EtUFJFU1M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkEnfSwgeydHQUJBR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgSEVSTUVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30sIHsnTGFjJywnR1NIJ30sIG9yIHsnRXRPSCcsJ0dBQkEnLCdHU0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIEhFUkNVTEVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBwaGFudG9tIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgTUVHQS1QUkVTUzogeydHQUJBJ30sIHsnR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgSEVSTUVTOiB7J0dBQkEnLCdHU0gnfSwgeydHbHgnLCdHU0gnfSwgeydMYWMnLCdHU0gnfSwgb3IgeydFdE9IJywnR0FCQScsJ0dTSCd9CiAgICBNUlNfc3RydWN0LnAuT05fT0ZGX29yZGVyID0gW107ICUgVGhlIGVkaXRpbmcgb3JkZXIgYXBwbGllZCBhdCBhY3F1aXNpdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBlbXB0eSAodGhlIGRlZmF1bHQ6IFtdKSwgR2FubmV0IHdpbGwgZGV0ZXJtaW5lIHRoZSBlZGl0aW5nIG9yZGVyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgT3RoZXJ3aXNlLCBpbnB1dCAnb2ZmZmlyc3QnIG9yICdvbmZpcnN0JyBmb3IgTUVHQS1lZGl0ZWQgZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvciwgZm9yIEhFUk1FUy9IRVJDVUxFUyBkYXRhLCBpbnB1dCBhIGZvdXItbGV0dGVyIGNvbWJpbmF0aW9uLCBzdWNoIGFzICdBQkNEJyBvciAnQ0JBRCcsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VlOiDvu79kb2k6MTAuMTAxNi9qLm5ldXJvaW1hZ2UuMjAxNi4wNy4wNTYpCiAgICBNUlNfc3RydWN0LnAuc2Vxb3JpZyA9ICdKSFUnOyAlIE9yaWdpbiBvZiBQaGlsaXBzIE1FR0EtUFJFU1Mgb3IgR0UgSEVSTUVTIHNlcXVlbmNlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3B0aW9ucyBhcmUgJ0pIVScgb3IgJ1BoaWxpcHMnIGlmIFBoaWxpcHMsIG9yICdMeXRoZ29lJyBpZiBHRSAoZm9yIEhFUk1FUyBvbmx5KQogICAgCiUgQW5hbHlzaXMgcGFyYW1ldGVycwogICAgTVJTX3N0cnVjdC5wLkxCICAgICAgICAgICAgPSAzOyAlIEV4cG9uZW50aWFsIGxpbmUtYnJvYWRlbmluZyAoaW4gSHopOyBkZWZhdWx0ID0gMyBIejsgZm9yIHBoYW50b20gZGF0YSwgfjEuNSBIeiBpcyByZWNvbW1lbmRlZAogICAgTVJTX3N0cnVjdC5wLndhdGVyX0VDQyAgICAgPSAxOyAlIDEgPSBZRVMsIHBlcmZvcm0gZWRkeSBjdXJyZW50IGNvcnJlY3Rpb24gb24gd2F0ZXIgZGF0YQogICAgTVJTX3N0cnVjdC5wLm1ldGFiX0VDQyAgICAgPSAwOyAlIDEgPSBZRVMsIHBlcmZvcm0gZWRkeSBjdXJyZW50IGNvcnJlY3Rpb24gb24gbWV0YWJvbGl0ZSBkYXRhIChyZXF1aXJlcyBhIHdhdGVyIHJlZmVyZW5jZSkKICAgIE1SU19zdHJ1Y3QucC53YXRlcl9yZW1vdmFsID0gMTsgJSAxID0gWUVTLCByZW1vdmUgcmVzaWR1YWwgd2F0ZXIgc2lnbmFsIGluIHRoZSBESUZGIHNwZWN0cnVtIHVzaW5nIEhTVkQKICAgIE1SU19zdHJ1Y3QucC5hbGlnbm1lbnQgICAgID0gJ1JvYnVzdFNwZWNSZWcnOyAlIEFsaWdubWVudCBtZXRob2Q7IG9wdGlvbnMgYXJlICdSb2J1c3RTcGVjUmVnJyAocmVjb21tZW5kZWQpLCAnU3BlY1JlZycsICdTcGVjUmVnSEVSTUVTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICdDcicsICdDaG8nLCAnTkFBJywgJ0gyTycsIG9yICdub25lJyAocmVjb21tZW5kZWQgZm9yIHBoYW50b20gZGF0YSkKICAgIE1SU19zdHJ1Y3QucC51c2VfcHJlYWxpZ25fcmVmICAgPSAwOyAlIDEgPSBZRVM7IGluIHNvbWUgY2FzZXMsIHVzaW5nIFJvYnVzdFNwZWNSZWcgdG8gYWxpZ24gSEVSTUVTL0hFUkNVTEVTIGRhdGEgY2FuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgd29yc2UgYWxpZ25tZW50IGNvbXBhcmVkIHRvIHRoZSBwcmUtYWxpZ25lZCBkYXRhOyBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDEgd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbWFrZSBSb2J1c3RTcGVjUmVnIHVzZSB0aGUgYXZlcmFnZWQgcHJlLWFsaWduZWQgc3Vic3BlY3RyYSBhcyByZWZlcmVuY2VzIHRvIGFsaWduIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYXZlcmFnZWQgcG9zdC1hbGlnbmVkIHN1YnNwZWN0cmEsIHdoaWNoIG1heSBpbXByb3ZlIHRoZSBmaW5hbCBhbGlnbm1lbnQKICAgIE1SU19zdHJ1Y3QucC52b3ggICAgICAgICAgICAgICAgPSB7J3ZveDEnfTsgJSBGb3IgbmFtaW5nIHZveGVscywgZS5nLiwgeydETFBGQyd9OyBpZiBkYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgUFJJQU0gdGhpcyBjb3VsZCBiZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBlLmcuLCB7J2FudGVyaW9yJywncG9zdGVyaW9yJ30sIHsncmlnaHQnLCdsZWZ0J30sIGV0Yy4KICAgIE1SU19zdHJ1Y3QucC5maXRfcmVzaWRfd2F0ZXIgICAgPSAwOyAlIDEgPSBZRVMsIGZpdCB0aGUgcmVzaWR1YWwgd2F0ZXIgc2lnbmFsIGluIHRoZSBPRkYgc3BlY3RydW0gdG8gY2FsY3VsYXRlIGEgd2F0ZXIgc3VwcHJlc3Npb24gZmFjdG9yCiAgICBNUlNfc3RydWN0LnAud2VpZ2h0ZWRfYXZlcmFnaW5nID0gMTsgJSAxID0gWUVTLCBhdmVyYWdlIHN1YnNwZWN0cmEgdXNpbmcgd2VpZ2h0ZWQgYXZlcmFnaW5nOyBvdGhlcndpc2UsIHVzZSBhcml0aG1ldGljIGF2ZXJhZ2luZwogICAgCiUgRmxhZ3MoMCA9IE5POyAxID0gWUVTKQogICAgTVJTX3N0cnVjdC5wLkhFUk1FUyAgICA9IDA7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIEhFUk1FUwogICAgTVJTX3N0cnVjdC5wLkhFUkNVTEVTICA9IDA7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIEhFUkNVTEVTOyBpZiAxLCBNUlNfc3RydWN0LnAuSEVSTUVTIG11c3QgYmUgc2V0IHRvIDEgYXMgd2VsbAogICAgTVJTX3N0cnVjdC5wLlBSSUFNICAgICA9IDA7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIFBSSUFNCiAgICBNUlNfc3RydWN0LnAucGhhbnRvbSAgID0gMDsgJSBEYXRhIGFyZSBmcm9tIGEgcGhhbnRvbSAoYXNzdW1lcyBwaGFudG9tIHdhcyBzY2FubmVkIGF0IHJvb20gdGVtcGVyYXR1cmUpCiAgICBNUlNfc3RydWN0LnAuam9pbiAgICAgID0gMDsgJSBKb2luIG11bHRpcGxlIGZpbGVzICh0aGlzIGNhbiBiZSBwZXJmb3JtZWQgaW4gYmF0Y2ggdG8gam9pbiBmaWxlcyBhY3Jvc3MgbXVsdGlwbGUgc3ViamVjdHMpCiAgICBNUlNfc3RydWN0LnAubWF0ICAgICAgID0gMDsgJSBTYXZlIE1SU19zdHJ1Y3QgYXMgYSAubWF0IGZpbGUKICAgIE1SU19zdHJ1Y3QucC5jc3YgICAgICAgPSAwOyAlIEV4dHJhY3QgdXNlZnVsIHJlc3VsdHMgZnJvbSB0aGUgb3V0cHV0IHN0cnVjdHVyZSBNUlNfc3RydWN0IGFuZCBleHBvcnQgdGhlbSB0byBhIC5jc3YgZmlsZSAoYXBwbGllcyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgR2FubmV0Rml0LCBHYW5uZXRTZWdtZW50LCBhbmQgR2FubmV0UXVhbnRpZnkgb25seSkKICAgIE1SU19zdHJ1Y3QucC5ub3JtYWxpemUgPSAwOyAlIElmIDEsIHRoZSB2b3hlbCBtYXNrcyBjcmVhdGVkIGJ5IEdhbm5ldENvUmVnaXN0ZXIgYW5kIEdhbm5ldFNlZ21lbnQgYXJlIG5vcm1hbGl6ZWQgdG8gTU5JIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbmQsIGlmIG1vcmUgdGhhbiBkYXRhc2V0IGhhcyBiZWVuIHJ1biBpbiB0aGUgcGlwZWxpbmUsIGEgbWVhbiBvdmVybGFwIHZveGVsIGlzIGNyZWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChub3RlIHRoYXQgdGhpcyBpcyBvbmx5IHJ1biBpZiBHYW5uZXRTZWdtZW50IGlzIHJ1bikKICAgIE1SU19zdHJ1Y3QucC5hcHBlbmQgICAgPSAwOyAlIEFwcGVuZCBQREYgb3V0cHV0cyBpbnRvIG9uZSBQREYgKHNlcGFyYXRlbHkgZm9yIGVhY2ggbW9kdWxlKSAocmVxdWlyZXMgZXhwb3J0X2ZpZyBpbiB0aGUgR2FubmV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBkaXJlY3RvcnkgdG8gYmUgYWRkZWQgdG8gdGhlIHNlYXJjaCBwYXRoIGFuZCBHaG9zdHNjcmlwdCB0byBiZSBpbnN0YWxsZWQpCiAgICBNUlNfc3RydWN0LnAuaGlkZSAgICAgID0gMDsgJSBEbyBub3QgZGlzcGxheSBvdXRwdXQgZmlndXJlcwpgYGAKCiMjIyBHQUJBLS9HU0gtZWRpdGVkIEhFUk1FUyBkYXRhCgpgYGB7b2N0YXZlLCBldmFsID0gRkFMU0V9CiUgQWNxdWlzaXRpb24gcGFyYW1ldGVycwogICAgTVJTX3N0cnVjdC5wLnRhcmdldCA9IHsnR0FCQUdseCcsJ0dTSCd9OyAlIEVkaXRlZCBtZXRhYm9saXRlKHMpIG9mIGludGVyZXN0OyBwZXJtaXR0ZWQgb3B0aW9ucyBhcmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgTUVHQS1QUkVTUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIHsnR0FCQSd9LCB7J0dBQkFHbHgnfSwgeydHU0gnfSwgeydMYWMnfSwgb3IgeydFdE9IJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBIRVJNRVM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkFHbHgnLCdHU0gnfSwgeydMYWMnLCdHU0gnfSwgb3IgeydFdE9IJywnR0FCQScsJ0dTSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgSEVSQ1VMRVM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkFHbHgnLCdHU0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIHBoYW50b20gZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIGFuZCBNRUdBLVBSRVNTOiB7J0dBQkEnfSwgeydHbHgnfSwgeydHU0gnfSwgeydMYWMnfSwgb3IgeydFdE9IJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIGFuZCBIRVJNRVM6IHsnR0FCQScsJ0dTSCd9LCB7J0dseCcsJ0dTSCd9LCB7J0xhYycsJ0dTSCd9LCBvciB7J0V0T0gnLCdHQUJBJywnR1NIJ30KICAgIE1SU19zdHJ1Y3QucC5PTl9PRkZfb3JkZXIgPSBbXTsgJSBUaGUgZWRpdGluZyBvcmRlciBhcHBsaWVkIGF0IGFjcXVpc2l0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIGVtcHR5ICh0aGUgZGVmYXVsdDogW10pLCBHYW5uZXQgd2lsbCBkZXRlcm1pbmUgdGhlIGVkaXRpbmcgb3JkZXIgYXV0b21hdGljYWxseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBPdGhlcndpc2UsIGlucHV0ICdvZmZmaXJzdCcgb3IgJ29uZmlyc3QnIGZvciBNRUdBLWVkaXRlZCBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9yLCBmb3IgSEVSTUVTL0hFUkNVTEVTIGRhdGEsIGlucHV0IGEgZm91ci1sZXR0ZXIgY29tYmluYXRpb24sIHN1Y2ggYXMgJ0FCQ0QnIG9yICdDQkFEJywgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWU6IO+7v2RvaToxMC4xMDE2L2oubmV1cm9pbWFnZS4yMDE2LjA3LjA1NikKICAgIE1SU19zdHJ1Y3QucC5zZXFvcmlnID0gJ0pIVSc7ICUgT3JpZ2luIG9mIFBoaWxpcHMgTUVHQS1QUkVTUyBvciBHRSBIRVJNRVMgc2VxdWVuY2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvcHRpb25zIGFyZSAnSkhVJyBvciAnUGhpbGlwcycgaWYgUGhpbGlwcywgb3IgJ0x5dGhnb2UnIGlmIEdFIChmb3IgSEVSTUVTIG9ubHkpCiAgICAKJSBBbmFseXNpcyBwYXJhbWV0ZXJzCiAgICBNUlNfc3RydWN0LnAuTEIgICAgICAgICAgICA9IDM7ICUgRXhwb25lbnRpYWwgbGluZS1icm9hZGVuaW5nIChpbiBIeik7IGRlZmF1bHQgPSAzIEh6OyBmb3IgcGhhbnRvbSBkYXRhLCB+MS41IEh6IGlzIHJlY29tbWVuZGVkCiAgICBNUlNfc3RydWN0LnAud2F0ZXJfRUNDICAgICA9IDE7ICUgMSA9IFlFUywgcGVyZm9ybSBlZGR5IGN1cnJlbnQgY29ycmVjdGlvbiBvbiB3YXRlciBkYXRhCiAgICBNUlNfc3RydWN0LnAubWV0YWJfRUNDICAgICA9IDA7ICUgMSA9IFlFUywgcGVyZm9ybSBlZGR5IGN1cnJlbnQgY29ycmVjdGlvbiBvbiBtZXRhYm9saXRlIGRhdGEgKHJlcXVpcmVzIGEgd2F0ZXIgcmVmZXJlbmNlKQogICAgTVJTX3N0cnVjdC5wLndhdGVyX3JlbW92YWwgPSAxOyAlIDEgPSBZRVMsIHJlbW92ZSByZXNpZHVhbCB3YXRlciBzaWduYWwgaW4gdGhlIERJRkYgc3BlY3RydW0gdXNpbmcgSFNWRAogICAgTVJTX3N0cnVjdC5wLmFsaWdubWVudCAgICAgPSAnUm9idXN0U3BlY1JlZyc7ICUgQWxpZ25tZW50IG1ldGhvZDsgb3B0aW9ucyBhcmUgJ1JvYnVzdFNwZWNSZWcnIChyZWNvbW1lbmRlZCksICdTcGVjUmVnJywgJ1NwZWNSZWdIRVJNRVMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgJ0NyJywgJ0NobycsICdOQUEnLCAnSDJPJywgb3IgJ25vbmUnIChyZWNvbW1lbmRlZCBmb3IgcGhhbnRvbSBkYXRhKQogICAgTVJTX3N0cnVjdC5wLnVzZV9wcmVhbGlnbl9yZWYgICA9IDA7ICUgMSA9IFlFUzsgaW4gc29tZSBjYXNlcywgdXNpbmcgUm9idXN0U3BlY1JlZyB0byBhbGlnbiBIRVJNRVMvSEVSQ1VMRVMgZGF0YSBjYW4gcmVzdWx0IGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB3b3JzZSBhbGlnbm1lbnQgY29tcGFyZWQgdG8gdGhlIHByZS1hbGlnbmVkIGRhdGE7IHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMSB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBtYWtlIFJvYnVzdFNwZWNSZWcgdXNlIHRoZSBhdmVyYWdlZCBwcmUtYWxpZ25lZCBzdWJzcGVjdHJhIGFzIHJlZmVyZW5jZXMgdG8gYWxpZ24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhdmVyYWdlZCBwb3N0LWFsaWduZWQgc3Vic3BlY3RyYSwgd2hpY2ggbWF5IGltcHJvdmUgdGhlIGZpbmFsIGFsaWdubWVudAogICAgTVJTX3N0cnVjdC5wLnZveCAgICAgICAgICAgICAgICA9IHsndm94MSd9OyAlIEZvciBuYW1pbmcgdm94ZWxzLCBlLmcuLCB7J0RMUEZDJ307IGlmIGRhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBQUklBTSB0aGlzIGNvdWxkIGJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGUuZy4sIHsnYW50ZXJpb3InLCdwb3N0ZXJpb3InfSwgeydyaWdodCcsJ2xlZnQnfSwgZXRjLgogICAgTVJTX3N0cnVjdC5wLmZpdF9yZXNpZF93YXRlciAgICA9IDA7ICUgMSA9IFlFUywgZml0IHRoZSByZXNpZHVhbCB3YXRlciBzaWduYWwgaW4gdGhlIE9GRiBzcGVjdHJ1bSB0byBjYWxjdWxhdGUgYSB3YXRlciBzdXBwcmVzc2lvbiBmYWN0b3IKICAgIE1SU19zdHJ1Y3QucC53ZWlnaHRlZF9hdmVyYWdpbmcgPSAxOyAlIDEgPSBZRVMsIGF2ZXJhZ2Ugc3Vic3BlY3RyYSB1c2luZyB3ZWlnaHRlZCBhdmVyYWdpbmc7IG90aGVyd2lzZSwgdXNlIGFyaXRobWV0aWMgYXZlcmFnaW5nCiAgICAKJSBGbGFncygwID0gTk87IDEgPSBZRVMpCiAgICBNUlNfc3RydWN0LnAuSEVSTUVTICAgID0gMTsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgSEVSTUVTCiAgICBNUlNfc3RydWN0LnAuSEVSQ1VMRVMgID0gMDsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgSEVSQ1VMRVM7IGlmIDEsIE1SU19zdHJ1Y3QucC5IRVJNRVMgbXVzdCBiZSBzZXQgdG8gMSBhcyB3ZWxsCiAgICBNUlNfc3RydWN0LnAuUFJJQU0gICAgID0gMDsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgUFJJQU0KICAgIE1SU19zdHJ1Y3QucC5waGFudG9tICAgPSAwOyAlIERhdGEgYXJlIGZyb20gYSBwaGFudG9tIChhc3N1bWVzIHBoYW50b20gd2FzIHNjYW5uZWQgYXQgcm9vbSB0ZW1wZXJhdHVyZSkKICAgIE1SU19zdHJ1Y3QucC5qb2luICAgICAgPSAwOyAlIEpvaW4gbXVsdGlwbGUgZmlsZXMgKHRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBiYXRjaCB0byBqb2luIGZpbGVzIGFjcm9zcyBtdWx0aXBsZSBzdWJqZWN0cykKICAgIE1SU19zdHJ1Y3QucC5tYXQgICAgICAgPSAwOyAlIFNhdmUgTVJTX3N0cnVjdCBhcyBhIC5tYXQgZmlsZQogICAgTVJTX3N0cnVjdC5wLmNzdiAgICAgICA9IDA7ICUgRXh0cmFjdCB1c2VmdWwgcmVzdWx0cyBmcm9tIHRoZSBvdXRwdXQgc3RydWN0dXJlIE1SU19zdHJ1Y3QgYW5kIGV4cG9ydCB0aGVtIHRvIGEgLmNzdiBmaWxlIChhcHBsaWVzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBHYW5uZXRGaXQsIEdhbm5ldFNlZ21lbnQsIGFuZCBHYW5uZXRRdWFudGlmeSBvbmx5KQogICAgTVJTX3N0cnVjdC5wLm5vcm1hbGl6ZSA9IDA7ICUgSWYgMSwgdGhlIHZveGVsIG1hc2tzIGNyZWF0ZWQgYnkgR2FubmV0Q29SZWdpc3RlciBhbmQgR2FubmV0U2VnbWVudCBhcmUgbm9ybWFsaXplZCB0byBNTkkgc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFuZCwgaWYgbW9yZSB0aGFuIGRhdGFzZXQgaGFzIGJlZW4gcnVuIGluIHRoZSBwaXBlbGluZSwgYSBtZWFuIG92ZXJsYXAgdm94ZWwgaXMgY3JlYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgcnVuIGlmIEdhbm5ldFNlZ21lbnQgaXMgcnVuKQogICAgTVJTX3N0cnVjdC5wLmFwcGVuZCAgICA9IDA7ICUgQXBwZW5kIFBERiBvdXRwdXRzIGludG8gb25lIFBERiAoc2VwYXJhdGVseSBmb3IgZWFjaCBtb2R1bGUpIChyZXF1aXJlcyBleHBvcnRfZmlnIGluIHRoZSBHYW5uZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGRpcmVjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgc2VhcmNoIHBhdGggYW5kIEdob3N0c2NyaXB0IHRvIGJlIGluc3RhbGxlZCkKICAgIE1SU19zdHJ1Y3QucC5oaWRlICAgICAgPSAwOyAlIERvIG5vdCBkaXNwbGF5IG91dHB1dCBmaWd1cmVzCmBgYAoKIyMjIFBoYW50b20gR0FCQS1lZGl0ZWQgTUVHQS1QUkVTUyBkYXRhCgpgYGB7b2N0YXZlLCBldmFsID0gRkFMU0V9CiUgQWNxdWlzaXRpb24gcGFyYW1ldGVycwogICAgTVJTX3N0cnVjdC5wLnRhcmdldCA9IHsnR0FCQSd9OyAlIEVkaXRlZCBtZXRhYm9saXRlKHMpIG9mIGludGVyZXN0OyBwZXJtaXR0ZWQgb3B0aW9ucyBhcmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgTUVHQS1QUkVTUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIHsnR0FCQSd9LCB7J0dBQkFHbHgnfSwgeydHU0gnfSwgeydMYWMnfSwgb3IgeydFdE9IJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBIRVJNRVM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkFHbHgnLCdHU0gnfSwgeydMYWMnLCdHU0gnfSwgb3IgeydFdE9IJywnR0FCQScsJ0dTSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgSEVSQ1VMRVM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkFHbHgnLCdHU0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIHBoYW50b20gZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIGFuZCBNRUdBLVBSRVNTOiB7J0dBQkEnfSwgeydHbHgnfSwgeydHU0gnfSwgeydMYWMnfSwgb3IgeydFdE9IJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIGFuZCBIRVJNRVM6IHsnR0FCQScsJ0dTSCd9LCB7J0dseCcsJ0dTSCd9LCB7J0xhYycsJ0dTSCd9LCBvciB7J0V0T0gnLCdHQUJBJywnR1NIJ30KICAgIE1SU19zdHJ1Y3QucC5PTl9PRkZfb3JkZXIgPSBbXTsgJSBUaGUgZWRpdGluZyBvcmRlciBhcHBsaWVkIGF0IGFjcXVpc2l0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIGVtcHR5ICh0aGUgZGVmYXVsdDogW10pLCBHYW5uZXQgd2lsbCBkZXRlcm1pbmUgdGhlIGVkaXRpbmcgb3JkZXIgYXV0b21hdGljYWxseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBPdGhlcndpc2UsIGlucHV0ICdvZmZmaXJzdCcgb3IgJ29uZmlyc3QnIGZvciBNRUdBLWVkaXRlZCBkYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9yLCBmb3IgSEVSTUVTL0hFUkNVTEVTIGRhdGEsIGlucHV0IGEgZm91ci1sZXR0ZXIgY29tYmluYXRpb24sIHN1Y2ggYXMgJ0FCQ0QnIG9yICdDQkFEJywgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWU6IO+7v2RvaToxMC4xMDE2L2oubmV1cm9pbWFnZS4yMDE2LjA3LjA1NikKICAgIE1SU19zdHJ1Y3QucC5zZXFvcmlnID0gJ0pIVSc7ICUgT3JpZ2luIG9mIFBoaWxpcHMgTUVHQS1QUkVTUyBvciBHRSBIRVJNRVMgc2VxdWVuY2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvcHRpb25zIGFyZSAnSkhVJyBvciAnUGhpbGlwcycgaWYgUGhpbGlwcywgb3IgJ0x5dGhnb2UnIGlmIEdFIChmb3IgSEVSTUVTIG9ubHkpCiAgICAKJSBBbmFseXNpcyBwYXJhbWV0ZXJzCiAgICBNUlNfc3RydWN0LnAuTEIgICAgICAgICAgICA9IDEuNTsgJSBFeHBvbmVudGlhbCBsaW5lLWJyb2FkZW5pbmcgKGluIEh6KTsgZGVmYXVsdCA9IDMgSHo7IGZvciBwaGFudG9tIGRhdGEsIH4xLjUgSHogaXMgcmVjb21tZW5kZWQKICAgIE1SU19zdHJ1Y3QucC53YXRlcl9FQ0MgICAgID0gMTsgJSAxID0gWUVTLCBwZXJmb3JtIGVkZHkgY3VycmVudCBjb3JyZWN0aW9uIG9uIHdhdGVyIGRhdGEKICAgIE1SU19zdHJ1Y3QucC5tZXRhYl9FQ0MgICAgID0gMDsgJSAxID0gWUVTLCBwZXJmb3JtIGVkZHkgY3VycmVudCBjb3JyZWN0aW9uIG9uIG1ldGFib2xpdGUgZGF0YSAocmVxdWlyZXMgYSB3YXRlciByZWZlcmVuY2UpCiAgICBNUlNfc3RydWN0LnAud2F0ZXJfcmVtb3ZhbCA9IDE7ICUgMSA9IFlFUywgcmVtb3ZlIHJlc2lkdWFsIHdhdGVyIHNpZ25hbCBpbiB0aGUgRElGRiBzcGVjdHJ1bSB1c2luZyBIU1ZECiAgICBNUlNfc3RydWN0LnAuYWxpZ25tZW50ICAgICA9ICdub25lJzsgJSBBbGlnbm1lbnQgbWV0aG9kOyBvcHRpb25zIGFyZSAnUm9idXN0U3BlY1JlZycgKHJlY29tbWVuZGVkKSwgJ1NwZWNSZWcnLCAnU3BlY1JlZ0hFUk1FUycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAnQ3InLCAnQ2hvJywgJ05BQScsICdIMk8nLCBvciAnbm9uZScgKHJlY29tbWVuZGVkIGZvciBwaGFudG9tIGRhdGEpCiAgICBNUlNfc3RydWN0LnAudXNlX3ByZWFsaWduX3JlZiAgID0gMDsgJSAxID0gWUVTOyBpbiBzb21lIGNhc2VzLCB1c2luZyBSb2J1c3RTcGVjUmVnIHRvIGFsaWduIEhFUk1FUy9IRVJDVUxFUyBkYXRhIGNhbiByZXN1bHQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHdvcnNlIGFsaWdubWVudCBjb21wYXJlZCB0byB0aGUgcHJlLWFsaWduZWQgZGF0YTsgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1ha2UgUm9idXN0U3BlY1JlZyB1c2UgdGhlIGF2ZXJhZ2VkIHByZS1hbGlnbmVkIHN1YnNwZWN0cmEgYXMgcmVmZXJlbmNlcyB0byBhbGlnbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGF2ZXJhZ2VkIHBvc3QtYWxpZ25lZCBzdWJzcGVjdHJhLCB3aGljaCBtYXkgaW1wcm92ZSB0aGUgZmluYWwgYWxpZ25tZW50CiAgICBNUlNfc3RydWN0LnAudm94ICAgICAgICAgICAgICAgID0geyd2b3gxJ307ICUgRm9yIG5hbWluZyB2b3hlbHMsIGUuZy4sIHsnRExQRkMnfTsgaWYgZGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIFBSSUFNIHRoaXMgY291bGQgYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZS5nLiwgeydhbnRlcmlvcicsJ3Bvc3Rlcmlvcid9LCB7J3JpZ2h0JywnbGVmdCd9LCBldGMuCiAgICBNUlNfc3RydWN0LnAuZml0X3Jlc2lkX3dhdGVyICAgID0gMDsgJSAxID0gWUVTLCBmaXQgdGhlIHJlc2lkdWFsIHdhdGVyIHNpZ25hbCBpbiB0aGUgT0ZGIHNwZWN0cnVtIHRvIGNhbGN1bGF0ZSBhIHdhdGVyIHN1cHByZXNzaW9uIGZhY3RvcgogICAgTVJTX3N0cnVjdC5wLndlaWdodGVkX2F2ZXJhZ2luZyA9IDE7ICUgMSA9IFlFUywgYXZlcmFnZSBzdWJzcGVjdHJhIHVzaW5nIHdlaWdodGVkIGF2ZXJhZ2luZzsgb3RoZXJ3aXNlLCB1c2UgYXJpdGhtZXRpYyBhdmVyYWdpbmcKICAgIAolIEZsYWdzKDAgPSBOTzsgMSA9IFlFUykKICAgIE1SU19zdHJ1Y3QucC5IRVJNRVMgICAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBIRVJNRVMKICAgIE1SU19zdHJ1Y3QucC5IRVJDVUxFUyAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBIRVJDVUxFUzsgaWYgMSwgTVJTX3N0cnVjdC5wLkhFUk1FUyBtdXN0IGJlIHNldCB0byAxIGFzIHdlbGwKICAgIE1SU19zdHJ1Y3QucC5QUklBTSAgICAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBQUklBTQogICAgTVJTX3N0cnVjdC5wLnBoYW50b20gICA9IDE7ICUgRGF0YSBhcmUgZnJvbSBhIHBoYW50b20gKGFzc3VtZXMgcGhhbnRvbSB3YXMgc2Nhbm5lZCBhdCByb29tIHRlbXBlcmF0dXJlKQogICAgTVJTX3N0cnVjdC5wLmpvaW4gICAgICA9IDA7ICUgSm9pbiBtdWx0aXBsZSBmaWxlcyAodGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIGJhdGNoIHRvIGpvaW4gZmlsZXMgYWNyb3NzIG11bHRpcGxlIHN1YmplY3RzKQogICAgTVJTX3N0cnVjdC5wLm1hdCAgICAgICA9IDA7ICUgU2F2ZSBNUlNfc3RydWN0IGFzIGEgLm1hdCBmaWxlCiAgICBNUlNfc3RydWN0LnAuY3N2ICAgICAgID0gMDsgJSBFeHRyYWN0IHVzZWZ1bCByZXN1bHRzIGZyb20gdGhlIG91dHB1dCBzdHJ1Y3R1cmUgTVJTX3N0cnVjdCBhbmQgZXhwb3J0IHRoZW0gdG8gYSAuY3N2IGZpbGUgKGFwcGxpZXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIEdhbm5ldEZpdCwgR2FubmV0U2VnbWVudCwgYW5kIEdhbm5ldFF1YW50aWZ5IG9ubHkpCiAgICBNUlNfc3RydWN0LnAubm9ybWFsaXplID0gMDsgJSBJZiAxLCB0aGUgdm94ZWwgbWFza3MgY3JlYXRlZCBieSBHYW5uZXRDb1JlZ2lzdGVyIGFuZCBHYW5uZXRTZWdtZW50IGFyZSBub3JtYWxpemVkIHRvIE1OSSBzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYW5kLCBpZiBtb3JlIHRoYW4gZGF0YXNldCBoYXMgYmVlbiBydW4gaW4gdGhlIHBpcGVsaW5lLCBhIG1lYW4gb3ZlcmxhcCB2b3hlbCBpcyBjcmVhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm90ZSB0aGF0IHRoaXMgaXMgb25seSBydW4gaWYgR2FubmV0U2VnbWVudCBpcyBydW4pCiAgICBNUlNfc3RydWN0LnAuYXBwZW5kICAgID0gMDsgJSBBcHBlbmQgUERGIG91dHB1dHMgaW50byBvbmUgUERGIChzZXBhcmF0ZWx5IGZvciBlYWNoIG1vZHVsZSkgKHJlcXVpcmVzIGV4cG9ydF9maWcgaW4gdGhlIEdhbm5ldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZGlyZWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBzZWFyY2ggcGF0aCBhbmQgR2hvc3RzY3JpcHQgdG8gYmUgaW5zdGFsbGVkKQogICAgTVJTX3N0cnVjdC5wLmhpZGUgICAgICA9IDA7ICUgRG8gbm90IGRpc3BsYXkgb3V0cHV0IGZpZ3VyZXMKYGBgCgoKCg==


Built with R Markdown in RStudio

Copyright © 2020–2025, Mark Mikkelsen