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
LS0tCnRpdGxlOiAiR2FubmV0UHJlSW5pdGlhbGlzZSBzZXR0aW5ncyIKZGF0ZTogIkxhc3QgdXBkYXRlZDogYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiAlZCwgJVknKWAiCm91dHB1dDogaHRtbF9kb2N1bWVudAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciwgY2hpbGQgPSBjKCJqcy9iYWNrLXRvLXRvcC5odG1sIiwgImpzL2NvcHktdG8tY2xpcGJvYXJkLmh0bWwiKX0KYGBgCgpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9CmJvZHkgLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDEyMDBweDsKfQpgYGAKCjxicj4KCjo6OiB3YXJuaW5nCjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiIHN0eWxlPSJjb2xvcjogd2hpdGUiPjwvaT4mbmJzcDsgVGhlc2UgZXhhbXBsZXMgd2VyZSBjcmVhdGVkIGluIHJlbGVhc2UgMy40LjAuIFRha2UgY2FyZSBjb3B5LXBhc3RpbmcgdGhlc2UgZXhhbXBsZXMgaW50byB5b3VyIHZlcnNpb24gb2YgYEdhbm5ldFByZUluaXRpYWxpc2UubWAuIFlvdSBtYXkgYmUgdXNpbmcgYSBkaWZmZXJlbnQgcmVsZWFzZSB0aGF0IGhhcyBvbGRlci9uZXdlciB2YXJpYWJsZXMgdGhhdCBjb3VsZCByZXN1bHQgaW4gYW4gZXJyb3IgZHVyaW5nIHRoZSBhbmFseXNpcyBwaXBlbGluZS4KOjo6CgojIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KCiMjIyBHQUJBLWVkaXRlZCBNRUdBLVBSRVNTIGRhdGEKCmBgYHtvY3RhdmUsIGV2YWwgPSBGQUxTRX0KJSBBY3F1aXNpdGlvbiBwYXJhbWV0ZXJzCiAgICBNUlNfc3RydWN0LnAudGFyZ2V0ID0geydHQUJBR2x4J307ICUgRWRpdGVkIG1ldGFib2xpdGUocykgb2YgaW50ZXJlc3Q7IHBlcm1pdHRlZCBvcHRpb25zIGFyZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBNRUdBLVBSRVNTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBJ30sIHsnR0FCQUdseCd9LCB7J0dTSCd9LCB7J0xhYyd9LCBvciB7J0V0T0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIEhFUk1FUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIHsnR0FCQUdseCcsJ0dTSCd9LCB7J0xhYycsJ0dTSCd9LCBvciB7J0V0T0gnLCdHQUJBJywnR1NIJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBIRVJDVUxFUzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAgIHsnR0FCQUdseCcsJ0dTSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgcGhhbnRvbSBkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgYW5kIE1FR0EtUFJFU1M6IHsnR0FCQSd9LCB7J0dseCd9LCB7J0dTSCd9LCB7J0xhYyd9LCBvciB7J0V0T0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgYW5kIEhFUk1FUzogeydHQUJBJywnR1NIJ30sIHsnR2x4JywnR1NIJ30sIHsnTGFjJywnR1NIJ30sIG9yIHsnRXRPSCcsJ0dBQkEnLCdHU0gnfQogICAgTVJTX3N0cnVjdC5wLk9OX09GRl9vcmRlciA9IFtdOyAlIFRoZSBlZGl0aW5nIG9yZGVyIGFwcGxpZWQgYXQgYWNxdWlzaXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgZW1wdHkgKHRoZSBkZWZhdWx0OiBbXSksIEdhbm5ldCB3aWxsIGRldGVybWluZSB0aGUgZWRpdGluZyBvcmRlciBhdXRvbWF0aWNhbGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIE90aGVyd2lzZSwgaW5wdXQgJ29mZmZpcnN0JyBvciAnb25maXJzdCcgZm9yIE1FR0EtZWRpdGVkIGRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3IsIGZvciBIRVJNRVMvSEVSQ1VMRVMgZGF0YSwgaW5wdXQgYSBmb3VyLWxldHRlciBjb21iaW5hdGlvbiwgc3VjaCBhcyAnQUJDRCcgb3IgJ0NCQUQnLCBldGMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlZTog77u/ZG9pOjEwLjEwMTYvai5uZXVyb2ltYWdlLjIwMTYuMDcuMDU2KQogICAgTVJTX3N0cnVjdC5wLnNlcW9yaWcgPSAnSkhVJzsgJSBPcmlnaW4gb2YgUGhpbGlwcyBNRUdBLVBSRVNTIG9yIEdFIEhFUk1FUyBzZXF1ZW5jZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9wdGlvbnMgYXJlICdKSFUnIG9yICdQaGlsaXBzJyBpZiBQaGlsaXBzLCBvciAnTHl0aGdvZScgaWYgR0UgKGZvciBIRVJNRVMgb25seSkKICAgIAolIEFuYWx5c2lzIHBhcmFtZXRlcnMKICAgIE1SU19zdHJ1Y3QucC5MQiAgICAgICAgICAgID0gMzsgJSBFeHBvbmVudGlhbCBsaW5lLWJyb2FkZW5pbmcgKGluIEh6KTsgZGVmYXVsdCA9IDMgSHo7IGZvciBwaGFudG9tIGRhdGEsIH4xLjUgSHogaXMgcmVjb21tZW5kZWQKICAgIE1SU19zdHJ1Y3QucC53YXRlcl9FQ0MgICAgID0gMTsgJSAxID0gWUVTLCBwZXJmb3JtIGVkZHkgY3VycmVudCBjb3JyZWN0aW9uIG9uIHdhdGVyIGRhdGEKICAgIE1SU19zdHJ1Y3QucC5tZXRhYl9FQ0MgICAgID0gMDsgJSAxID0gWUVTLCBwZXJmb3JtIGVkZHkgY3VycmVudCBjb3JyZWN0aW9uIG9uIG1ldGFib2xpdGUgZGF0YSAocmVxdWlyZXMgYSB3YXRlciByZWZlcmVuY2UpCiAgICBNUlNfc3RydWN0LnAud2F0ZXJfcmVtb3ZhbCA9IDE7ICUgMSA9IFlFUywgcmVtb3ZlIHJlc2lkdWFsIHdhdGVyIHNpZ25hbCBpbiB0aGUgRElGRiBzcGVjdHJ1bSB1c2luZyBIU1ZECiAgICBNUlNfc3RydWN0LnAuYWxpZ25tZW50ICAgICA9ICdSb2J1c3RTcGVjUmVnJzsgJSBBbGlnbm1lbnQgbWV0aG9kOyBvcHRpb25zIGFyZSAnUm9idXN0U3BlY1JlZycgKHJlY29tbWVuZGVkKSwgJ1NwZWNSZWcnLCAnU3BlY1JlZ0hFUk1FUycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAnQ3InLCAnQ2hvJywgJ05BQScsICdIMk8nLCBvciAnbm9uZScgKHJlY29tbWVuZGVkIGZvciBwaGFudG9tIGRhdGEpCiAgICBNUlNfc3RydWN0LnAudXNlX3ByZWFsaWduX3JlZiAgID0gMDsgJSAxID0gWUVTOyBpbiBzb21lIGNhc2VzLCB1c2luZyBSb2J1c3RTcGVjUmVnIHRvIGFsaWduIEhFUk1FUy9IRVJDVUxFUyBkYXRhIGNhbiByZXN1bHQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHdvcnNlIGFsaWdubWVudCBjb21wYXJlZCB0byB0aGUgcHJlLWFsaWduZWQgZGF0YTsgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxIHdpbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1ha2UgUm9idXN0U3BlY1JlZyB1c2UgdGhlIGF2ZXJhZ2VkIHByZS1hbGlnbmVkIHN1YnNwZWN0cmEgYXMgcmVmZXJlbmNlcyB0byBhbGlnbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGF2ZXJhZ2VkIHBvc3QtYWxpZ25lZCBzdWJzcGVjdHJhLCB3aGljaCBtYXkgaW1wcm92ZSB0aGUgZmluYWwgYWxpZ25tZW50CiAgICBNUlNfc3RydWN0LnAudm94ICAgICAgICAgICAgICAgID0geyd2b3gxJ307ICUgRm9yIG5hbWluZyB2b3hlbHMsIGUuZy4sIHsnRExQRkMnfTsgaWYgZGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIFBSSUFNIHRoaXMgY291bGQgYmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZS5nLiwgeydhbnRlcmlvcicsJ3Bvc3Rlcmlvcid9LCB7J3JpZ2h0JywnbGVmdCd9LCBldGMuCiAgICBNUlNfc3RydWN0LnAuZml0X3Jlc2lkX3dhdGVyICAgID0gMDsgJSAxID0gWUVTLCBmaXQgdGhlIHJlc2lkdWFsIHdhdGVyIHNpZ25hbCBpbiB0aGUgT0ZGIHNwZWN0cnVtIHRvIGNhbGN1bGF0ZSBhIHdhdGVyIHN1cHByZXNzaW9uIGZhY3RvcgogICAgTVJTX3N0cnVjdC5wLndlaWdodGVkX2F2ZXJhZ2luZyA9IDE7ICUgMSA9IFlFUywgYXZlcmFnZSBzdWJzcGVjdHJhIHVzaW5nIHdlaWdodGVkIGF2ZXJhZ2luZzsgb3RoZXJ3aXNlLCB1c2UgYXJpdGhtZXRpYyBhdmVyYWdpbmcKICAgIAolIEZsYWdzKDAgPSBOTzsgMSA9IFlFUykKICAgIE1SU19zdHJ1Y3QucC5IRVJNRVMgICAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBIRVJNRVMKICAgIE1SU19zdHJ1Y3QucC5IRVJDVUxFUyAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBIRVJDVUxFUzsgaWYgMSwgTVJTX3N0cnVjdC5wLkhFUk1FUyBtdXN0IGJlIHNldCB0byAxIGFzIHdlbGwKICAgIE1SU19zdHJ1Y3QucC5QUklBTSAgICAgPSAwOyAlIERhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBQUklBTQogICAgTVJTX3N0cnVjdC5wLnBoYW50b20gICA9IDA7ICUgRGF0YSBhcmUgZnJvbSBhIHBoYW50b20gKGFzc3VtZXMgcGhhbnRvbSB3YXMgc2Nhbm5lZCBhdCByb29tIHRlbXBlcmF0dXJlKQogICAgTVJTX3N0cnVjdC5wLmpvaW4gICAgICA9IDA7ICUgSm9pbiBtdWx0aXBsZSBmaWxlcyAodGhpcyBjYW4gYmUgcGVyZm9ybWVkIGluIGJhdGNoIHRvIGpvaW4gZmlsZXMgYWNyb3NzIG11bHRpcGxlIHN1YmplY3RzKQogICAgTVJTX3N0cnVjdC5wLm1hdCAgICAgICA9IDA7ICUgU2F2ZSBNUlNfc3RydWN0IGFzIGEgLm1hdCBmaWxlCiAgICBNUlNfc3RydWN0LnAuY3N2ICAgICAgID0gMDsgJSBFeHRyYWN0IHVzZWZ1bCByZXN1bHRzIGZyb20gdGhlIG91dHB1dCBzdHJ1Y3R1cmUgTVJTX3N0cnVjdCBhbmQgZXhwb3J0IHRoZW0gdG8gYSAuY3N2IGZpbGUgKGFwcGxpZXMgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIEdhbm5ldEZpdCwgR2FubmV0U2VnbWVudCwgYW5kIEdhbm5ldFF1YW50aWZ5IG9ubHkpCiAgICBNUlNfc3RydWN0LnAubm9ybWFsaXplID0gMDsgJSBJZiAxLCB0aGUgdm94ZWwgbWFza3MgY3JlYXRlZCBieSBHYW5uZXRDb1JlZ2lzdGVyIGFuZCBHYW5uZXRTZWdtZW50IGFyZSBub3JtYWxpemVkIHRvIE1OSSBzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYW5kLCBpZiBtb3JlIHRoYW4gZGF0YXNldCBoYXMgYmVlbiBydW4gaW4gdGhlIHBpcGVsaW5lLCBhIG1lYW4gb3ZlcmxhcCB2b3hlbCBpcyBjcmVhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm90ZSB0aGF0IHRoaXMgaXMgb25seSBydW4gaWYgR2FubmV0U2VnbWVudCBpcyBydW4pCiAgICBNUlNfc3RydWN0LnAuYXBwZW5kICAgID0gMDsgJSBBcHBlbmQgUERGIG91dHB1dHMgaW50byBvbmUgUERGIChzZXBhcmF0ZWx5IGZvciBlYWNoIG1vZHVsZSkgKHJlcXVpcmVzIGV4cG9ydF9maWcgaW4gdGhlIEdhbm5ldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZGlyZWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBzZWFyY2ggcGF0aCBhbmQgR2hvc3RzY3JpcHQgdG8gYmUgaW5zdGFsbGVkKQogICAgTVJTX3N0cnVjdC5wLmhpZGUgICAgICA9IDA7ICUgRG8gbm90IGRpc3BsYXkgb3V0cHV0IGZpZ3VyZXMKYGBgCgojIyMgR0FCQS0vR1NILWVkaXRlZCBIRVJNRVMgZGF0YQoKYGBge29jdGF2ZSwgZXZhbCA9IEZBTFNFfQolIEFjcXVpc2l0aW9uIHBhcmFtZXRlcnMKICAgIE1SU19zdHJ1Y3QucC50YXJnZXQgPSB7J0dBQkFHbHgnLCdHU0gnfTsgJSBFZGl0ZWQgbWV0YWJvbGl0ZShzKSBvZiBpbnRlcmVzdDsgcGVybWl0dGVkIG9wdGlvbnMgYXJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIE1FR0EtUFJFU1M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkEnfSwgeydHQUJBR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgSEVSTUVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30sIHsnTGFjJywnR1NIJ30sIG9yIHsnRXRPSCcsJ0dBQkEnLCdHU0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIEhFUkNVTEVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBwaGFudG9tIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgTUVHQS1QUkVTUzogeydHQUJBJ30sIHsnR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgSEVSTUVTOiB7J0dBQkEnLCdHU0gnfSwgeydHbHgnLCdHU0gnfSwgeydMYWMnLCdHU0gnfSwgb3IgeydFdE9IJywnR0FCQScsJ0dTSCd9CiAgICBNUlNfc3RydWN0LnAuT05fT0ZGX29yZGVyID0gW107ICUgVGhlIGVkaXRpbmcgb3JkZXIgYXBwbGllZCBhdCBhY3F1aXNpdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBlbXB0eSAodGhlIGRlZmF1bHQ6IFtdKSwgR2FubmV0IHdpbGwgZGV0ZXJtaW5lIHRoZSBlZGl0aW5nIG9yZGVyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgT3RoZXJ3aXNlLCBpbnB1dCAnb2ZmZmlyc3QnIG9yICdvbmZpcnN0JyBmb3IgTUVHQS1lZGl0ZWQgZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvciwgZm9yIEhFUk1FUy9IRVJDVUxFUyBkYXRhLCBpbnB1dCBhIGZvdXItbGV0dGVyIGNvbWJpbmF0aW9uLCBzdWNoIGFzICdBQkNEJyBvciAnQ0JBRCcsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VlOiDvu79kb2k6MTAuMTAxNi9qLm5ldXJvaW1hZ2UuMjAxNi4wNy4wNTYpCiAgICBNUlNfc3RydWN0LnAuc2Vxb3JpZyA9ICdKSFUnOyAlIE9yaWdpbiBvZiBQaGlsaXBzIE1FR0EtUFJFU1Mgb3IgR0UgSEVSTUVTIHNlcXVlbmNlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3B0aW9ucyBhcmUgJ0pIVScgb3IgJ1BoaWxpcHMnIGlmIFBoaWxpcHMsIG9yICdMeXRoZ29lJyBpZiBHRSAoZm9yIEhFUk1FUyBvbmx5KQogICAgCiUgQW5hbHlzaXMgcGFyYW1ldGVycwogICAgTVJTX3N0cnVjdC5wLkxCICAgICAgICAgICAgPSAzOyAlIEV4cG9uZW50aWFsIGxpbmUtYnJvYWRlbmluZyAoaW4gSHopOyBkZWZhdWx0ID0gMyBIejsgZm9yIHBoYW50b20gZGF0YSwgfjEuNSBIeiBpcyByZWNvbW1lbmRlZAogICAgTVJTX3N0cnVjdC5wLndhdGVyX0VDQyAgICAgPSAxOyAlIDEgPSBZRVMsIHBlcmZvcm0gZWRkeSBjdXJyZW50IGNvcnJlY3Rpb24gb24gd2F0ZXIgZGF0YQogICAgTVJTX3N0cnVjdC5wLm1ldGFiX0VDQyAgICAgPSAwOyAlIDEgPSBZRVMsIHBlcmZvcm0gZWRkeSBjdXJyZW50IGNvcnJlY3Rpb24gb24gbWV0YWJvbGl0ZSBkYXRhIChyZXF1aXJlcyBhIHdhdGVyIHJlZmVyZW5jZSkKICAgIE1SU19zdHJ1Y3QucC53YXRlcl9yZW1vdmFsID0gMTsgJSAxID0gWUVTLCByZW1vdmUgcmVzaWR1YWwgd2F0ZXIgc2lnbmFsIGluIHRoZSBESUZGIHNwZWN0cnVtIHVzaW5nIEhTVkQKICAgIE1SU19zdHJ1Y3QucC5hbGlnbm1lbnQgICAgID0gJ1JvYnVzdFNwZWNSZWcnOyAlIEFsaWdubWVudCBtZXRob2Q7IG9wdGlvbnMgYXJlICdSb2J1c3RTcGVjUmVnJyAocmVjb21tZW5kZWQpLCAnU3BlY1JlZycsICdTcGVjUmVnSEVSTUVTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICdDcicsICdDaG8nLCAnTkFBJywgJ0gyTycsIG9yICdub25lJyAocmVjb21tZW5kZWQgZm9yIHBoYW50b20gZGF0YSkKICAgIE1SU19zdHJ1Y3QucC51c2VfcHJlYWxpZ25fcmVmICAgPSAwOyAlIDEgPSBZRVM7IGluIHNvbWUgY2FzZXMsIHVzaW5nIFJvYnVzdFNwZWNSZWcgdG8gYWxpZ24gSEVSTUVTL0hFUkNVTEVTIGRhdGEgY2FuIHJlc3VsdCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgd29yc2UgYWxpZ25tZW50IGNvbXBhcmVkIHRvIHRoZSBwcmUtYWxpZ25lZCBkYXRhOyBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDEgd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbWFrZSBSb2J1c3RTcGVjUmVnIHVzZSB0aGUgYXZlcmFnZWQgcHJlLWFsaWduZWQgc3Vic3BlY3RyYSBhcyByZWZlcmVuY2VzIHRvIGFsaWduIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgYXZlcmFnZWQgcG9zdC1hbGlnbmVkIHN1YnNwZWN0cmEsIHdoaWNoIG1heSBpbXByb3ZlIHRoZSBmaW5hbCBhbGlnbm1lbnQKICAgIE1SU19zdHJ1Y3QucC52b3ggICAgICAgICAgICAgICAgPSB7J3ZveDEnfTsgJSBGb3IgbmFtaW5nIHZveGVscywgZS5nLiwgeydETFBGQyd9OyBpZiBkYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgUFJJQU0gdGhpcyBjb3VsZCBiZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBlLmcuLCB7J2FudGVyaW9yJywncG9zdGVyaW9yJ30sIHsncmlnaHQnLCdsZWZ0J30sIGV0Yy4KICAgIE1SU19zdHJ1Y3QucC5maXRfcmVzaWRfd2F0ZXIgICAgPSAwOyAlIDEgPSBZRVMsIGZpdCB0aGUgcmVzaWR1YWwgd2F0ZXIgc2lnbmFsIGluIHRoZSBPRkYgc3BlY3RydW0gdG8gY2FsY3VsYXRlIGEgd2F0ZXIgc3VwcHJlc3Npb24gZmFjdG9yCiAgICBNUlNfc3RydWN0LnAud2VpZ2h0ZWRfYXZlcmFnaW5nID0gMTsgJSAxID0gWUVTLCBhdmVyYWdlIHN1YnNwZWN0cmEgdXNpbmcgd2VpZ2h0ZWQgYXZlcmFnaW5nOyBvdGhlcndpc2UsIHVzZSBhcml0aG1ldGljIGF2ZXJhZ2luZwogICAgCiUgRmxhZ3MoMCA9IE5POyAxID0gWUVTKQogICAgTVJTX3N0cnVjdC5wLkhFUk1FUyAgICA9IDE7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIEhFUk1FUwogICAgTVJTX3N0cnVjdC5wLkhFUkNVTEVTICA9IDA7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIEhFUkNVTEVTOyBpZiAxLCBNUlNfc3RydWN0LnAuSEVSTUVTIG11c3QgYmUgc2V0IHRvIDEgYXMgd2VsbAogICAgTVJTX3N0cnVjdC5wLlBSSUFNICAgICA9IDA7ICUgRGF0YSB3ZXJlIGFjcXVpcmVkIHVzaW5nIFBSSUFNCiAgICBNUlNfc3RydWN0LnAucGhhbnRvbSAgID0gMDsgJSBEYXRhIGFyZSBmcm9tIGEgcGhhbnRvbSAoYXNzdW1lcyBwaGFudG9tIHdhcyBzY2FubmVkIGF0IHJvb20gdGVtcGVyYXR1cmUpCiAgICBNUlNfc3RydWN0LnAuam9pbiAgICAgID0gMDsgJSBKb2luIG11bHRpcGxlIGZpbGVzICh0aGlzIGNhbiBiZSBwZXJmb3JtZWQgaW4gYmF0Y2ggdG8gam9pbiBmaWxlcyBhY3Jvc3MgbXVsdGlwbGUgc3ViamVjdHMpCiAgICBNUlNfc3RydWN0LnAubWF0ICAgICAgID0gMDsgJSBTYXZlIE1SU19zdHJ1Y3QgYXMgYSAubWF0IGZpbGUKICAgIE1SU19zdHJ1Y3QucC5jc3YgICAgICAgPSAwOyAlIEV4dHJhY3QgdXNlZnVsIHJlc3VsdHMgZnJvbSB0aGUgb3V0cHV0IHN0cnVjdHVyZSBNUlNfc3RydWN0IGFuZCBleHBvcnQgdGhlbSB0byBhIC5jc3YgZmlsZSAoYXBwbGllcyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgR2FubmV0Rml0LCBHYW5uZXRTZWdtZW50LCBhbmQgR2FubmV0UXVhbnRpZnkgb25seSkKICAgIE1SU19zdHJ1Y3QucC5ub3JtYWxpemUgPSAwOyAlIElmIDEsIHRoZSB2b3hlbCBtYXNrcyBjcmVhdGVkIGJ5IEdhbm5ldENvUmVnaXN0ZXIgYW5kIEdhbm5ldFNlZ21lbnQgYXJlIG5vcm1hbGl6ZWQgdG8gTU5JIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbmQsIGlmIG1vcmUgdGhhbiBkYXRhc2V0IGhhcyBiZWVuIHJ1biBpbiB0aGUgcGlwZWxpbmUsIGEgbWVhbiBvdmVybGFwIHZveGVsIGlzIGNyZWF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChub3RlIHRoYXQgdGhpcyBpcyBvbmx5IHJ1biBpZiBHYW5uZXRTZWdtZW50IGlzIHJ1bikKICAgIE1SU19zdHJ1Y3QucC5hcHBlbmQgICAgPSAwOyAlIEFwcGVuZCBQREYgb3V0cHV0cyBpbnRvIG9uZSBQREYgKHNlcGFyYXRlbHkgZm9yIGVhY2ggbW9kdWxlKSAocmVxdWlyZXMgZXhwb3J0X2ZpZyBpbiB0aGUgR2FubmV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBkaXJlY3RvcnkgdG8gYmUgYWRkZWQgdG8gdGhlIHNlYXJjaCBwYXRoIGFuZCBHaG9zdHNjcmlwdCB0byBiZSBpbnN0YWxsZWQpCiAgICBNUlNfc3RydWN0LnAuaGlkZSAgICAgID0gMDsgJSBEbyBub3QgZGlzcGxheSBvdXRwdXQgZmlndXJlcwpgYGAKCiMjIyBQaGFudG9tIEdBQkEtZWRpdGVkIE1FR0EtUFJFU1MgZGF0YQoKYGBge29jdGF2ZSwgZXZhbCA9IEZBTFNFfQolIEFjcXVpc2l0aW9uIHBhcmFtZXRlcnMKICAgIE1SU19zdHJ1Y3QucC50YXJnZXQgPSB7J0dBQkEnfTsgJSBFZGl0ZWQgbWV0YWJvbGl0ZShzKSBvZiBpbnRlcmVzdDsgcGVybWl0dGVkIG9wdGlvbnMgYXJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIE1FR0EtUFJFU1M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICB7J0dBQkEnfSwgeydHQUJBR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgSWYgSEVSTUVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30sIHsnTGFjJywnR1NIJ30sIG9yIHsnRXRPSCcsJ0dBQkEnLCdHU0gnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIElmIEhFUkNVTEVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICAgeydHQUJBR2x4JywnR1NIJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBwaGFudG9tIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgTUVHQS1QUkVTUzogeydHQUJBJ30sIHsnR2x4J30sIHsnR1NIJ30sIHsnTGFjJ30sIG9yIHsnRXRPSCd9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgICBhbmQgSEVSTUVTOiB7J0dBQkEnLCdHU0gnfSwgeydHbHgnLCdHU0gnfSwgeydMYWMnLCdHU0gnfSwgb3IgeydFdE9IJywnR0FCQScsJ0dTSCd9CiAgICBNUlNfc3RydWN0LnAuT05fT0ZGX29yZGVyID0gW107ICUgVGhlIGVkaXRpbmcgb3JkZXIgYXBwbGllZCBhdCBhY3F1aXNpdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBJZiBlbXB0eSAodGhlIGRlZmF1bHQ6IFtdKSwgR2FubmV0IHdpbGwgZGV0ZXJtaW5lIHRoZSBlZGl0aW5nIG9yZGVyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgT3RoZXJ3aXNlLCBpbnB1dCAnb2ZmZmlyc3QnIG9yICdvbmZpcnN0JyBmb3IgTUVHQS1lZGl0ZWQgZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvciwgZm9yIEhFUk1FUy9IRVJDVUxFUyBkYXRhLCBpbnB1dCBhIGZvdXItbGV0dGVyIGNvbWJpbmF0aW9uLCBzdWNoIGFzICdBQkNEJyBvciAnQ0JBRCcsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VlOiDvu79kb2k6MTAuMTAxNi9qLm5ldXJvaW1hZ2UuMjAxNi4wNy4wNTYpCiAgICBNUlNfc3RydWN0LnAuc2Vxb3JpZyA9ICdKSFUnOyAlIE9yaWdpbiBvZiBQaGlsaXBzIE1FR0EtUFJFU1Mgb3IgR0UgSEVSTUVTIHNlcXVlbmNlczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3B0aW9ucyBhcmUgJ0pIVScgb3IgJ1BoaWxpcHMnIGlmIFBoaWxpcHMsIG9yICdMeXRoZ29lJyBpZiBHRSAoZm9yIEhFUk1FUyBvbmx5KQogICAgCiUgQW5hbHlzaXMgcGFyYW1ldGVycwogICAgTVJTX3N0cnVjdC5wLkxCICAgICAgICAgICAgPSAxLjU7ICUgRXhwb25lbnRpYWwgbGluZS1icm9hZGVuaW5nIChpbiBIeik7IGRlZmF1bHQgPSAzIEh6OyBmb3IgcGhhbnRvbSBkYXRhLCB+MS41IEh6IGlzIHJlY29tbWVuZGVkCiAgICBNUlNfc3RydWN0LnAud2F0ZXJfRUNDICAgICA9IDE7ICUgMSA9IFlFUywgcGVyZm9ybSBlZGR5IGN1cnJlbnQgY29ycmVjdGlvbiBvbiB3YXRlciBkYXRhCiAgICBNUlNfc3RydWN0LnAubWV0YWJfRUNDICAgICA9IDA7ICUgMSA9IFlFUywgcGVyZm9ybSBlZGR5IGN1cnJlbnQgY29ycmVjdGlvbiBvbiBtZXRhYm9saXRlIGRhdGEgKHJlcXVpcmVzIGEgd2F0ZXIgcmVmZXJlbmNlKQogICAgTVJTX3N0cnVjdC5wLndhdGVyX3JlbW92YWwgPSAxOyAlIDEgPSBZRVMsIHJlbW92ZSByZXNpZHVhbCB3YXRlciBzaWduYWwgaW4gdGhlIERJRkYgc3BlY3RydW0gdXNpbmcgSFNWRAogICAgTVJTX3N0cnVjdC5wLmFsaWdubWVudCAgICAgPSAnbm9uZSc7ICUgQWxpZ25tZW50IG1ldGhvZDsgb3B0aW9ucyBhcmUgJ1JvYnVzdFNwZWNSZWcnIChyZWNvbW1lbmRlZCksICdTcGVjUmVnJywgJ1NwZWNSZWdIRVJNRVMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgJ0NyJywgJ0NobycsICdOQUEnLCAnSDJPJywgb3IgJ25vbmUnIChyZWNvbW1lbmRlZCBmb3IgcGhhbnRvbSBkYXRhKQogICAgTVJTX3N0cnVjdC5wLnVzZV9wcmVhbGlnbl9yZWYgICA9IDA7ICUgMSA9IFlFUzsgaW4gc29tZSBjYXNlcywgdXNpbmcgUm9idXN0U3BlY1JlZyB0byBhbGlnbiBIRVJNRVMvSEVSQ1VMRVMgZGF0YSBjYW4gcmVzdWx0IGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB3b3JzZSBhbGlnbm1lbnQgY29tcGFyZWQgdG8gdGhlIHByZS1hbGlnbmVkIGRhdGE7IHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMSB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBtYWtlIFJvYnVzdFNwZWNSZWcgdXNlIHRoZSBhdmVyYWdlZCBwcmUtYWxpZ25lZCBzdWJzcGVjdHJhIGFzIHJlZmVyZW5jZXMgdG8gYWxpZ24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhdmVyYWdlZCBwb3N0LWFsaWduZWQgc3Vic3BlY3RyYSwgd2hpY2ggbWF5IGltcHJvdmUgdGhlIGZpbmFsIGFsaWdubWVudAogICAgTVJTX3N0cnVjdC5wLnZveCAgICAgICAgICAgICAgICA9IHsndm94MSd9OyAlIEZvciBuYW1pbmcgdm94ZWxzLCBlLmcuLCB7J0RMUEZDJ307IGlmIGRhdGEgd2VyZSBhY3F1aXJlZCB1c2luZyBQUklBTSB0aGlzIGNvdWxkIGJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGUuZy4sIHsnYW50ZXJpb3InLCdwb3N0ZXJpb3InfSwgeydyaWdodCcsJ2xlZnQnfSwgZXRjLgogICAgTVJTX3N0cnVjdC5wLmZpdF9yZXNpZF93YXRlciAgICA9IDA7ICUgMSA9IFlFUywgZml0IHRoZSByZXNpZHVhbCB3YXRlciBzaWduYWwgaW4gdGhlIE9GRiBzcGVjdHJ1bSB0byBjYWxjdWxhdGUgYSB3YXRlciBzdXBwcmVzc2lvbiBmYWN0b3IKICAgIE1SU19zdHJ1Y3QucC53ZWlnaHRlZF9hdmVyYWdpbmcgPSAxOyAlIDEgPSBZRVMsIGF2ZXJhZ2Ugc3Vic3BlY3RyYSB1c2luZyB3ZWlnaHRlZCBhdmVyYWdpbmc7IG90aGVyd2lzZSwgdXNlIGFyaXRobWV0aWMgYXZlcmFnaW5nCiAgICAKJSBGbGFncygwID0gTk87IDEgPSBZRVMpCiAgICBNUlNfc3RydWN0LnAuSEVSTUVTICAgID0gMDsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgSEVSTUVTCiAgICBNUlNfc3RydWN0LnAuSEVSQ1VMRVMgID0gMDsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgSEVSQ1VMRVM7IGlmIDEsIE1SU19zdHJ1Y3QucC5IRVJNRVMgbXVzdCBiZSBzZXQgdG8gMSBhcyB3ZWxsCiAgICBNUlNfc3RydWN0LnAuUFJJQU0gICAgID0gMDsgJSBEYXRhIHdlcmUgYWNxdWlyZWQgdXNpbmcgUFJJQU0KICAgIE1SU19zdHJ1Y3QucC5waGFudG9tICAgPSAxOyAlIERhdGEgYXJlIGZyb20gYSBwaGFudG9tIChhc3N1bWVzIHBoYW50b20gd2FzIHNjYW5uZWQgYXQgcm9vbSB0ZW1wZXJhdHVyZSkKICAgIE1SU19zdHJ1Y3QucC5qb2luICAgICAgPSAwOyAlIEpvaW4gbXVsdGlwbGUgZmlsZXMgKHRoaXMgY2FuIGJlIHBlcmZvcm1lZCBpbiBiYXRjaCB0byBqb2luIGZpbGVzIGFjcm9zcyBtdWx0aXBsZSBzdWJqZWN0cykKICAgIE1SU19zdHJ1Y3QucC5tYXQgICAgICAgPSAwOyAlIFNhdmUgTVJTX3N0cnVjdCBhcyBhIC5tYXQgZmlsZQogICAgTVJTX3N0cnVjdC5wLmNzdiAgICAgICA9IDA7ICUgRXh0cmFjdCB1c2VmdWwgcmVzdWx0cyBmcm9tIHRoZSBvdXRwdXQgc3RydWN0dXJlIE1SU19zdHJ1Y3QgYW5kIGV4cG9ydCB0aGVtIHRvIGEgLmNzdiBmaWxlIChhcHBsaWVzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBHYW5uZXRGaXQsIEdhbm5ldFNlZ21lbnQsIGFuZCBHYW5uZXRRdWFudGlmeSBvbmx5KQogICAgTVJTX3N0cnVjdC5wLm5vcm1hbGl6ZSA9IDA7ICUgSWYgMSwgdGhlIHZveGVsIG1hc2tzIGNyZWF0ZWQgYnkgR2FubmV0Q29SZWdpc3RlciBhbmQgR2FubmV0U2VnbWVudCBhcmUgbm9ybWFsaXplZCB0byBNTkkgc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFuZCwgaWYgbW9yZSB0aGFuIGRhdGFzZXQgaGFzIGJlZW4gcnVuIGluIHRoZSBwaXBlbGluZSwgYSBtZWFuIG92ZXJsYXAgdm94ZWwgaXMgY3JlYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgcnVuIGlmIEdhbm5ldFNlZ21lbnQgaXMgcnVuKQogICAgTVJTX3N0cnVjdC5wLmFwcGVuZCAgICA9IDA7ICUgQXBwZW5kIFBERiBvdXRwdXRzIGludG8gb25lIFBERiAoc2VwYXJhdGVseSBmb3IgZWFjaCBtb2R1bGUpIChyZXF1aXJlcyBleHBvcnRfZmlnIGluIHRoZSBHYW5uZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGRpcmVjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgc2VhcmNoIHBhdGggYW5kIEdob3N0c2NyaXB0IHRvIGJlIGluc3RhbGxlZCkKICAgIE1SU19zdHJ1Y3QucC5oaWRlICAgICAgPSAwOyAlIERvIG5vdCBkaXNwbGF5IG91dHB1dCBmaWd1cmVzCmBgYAoKCgo=

Built with R Markdown in RStudio

Copyright © 2020–2026, Mark Mikkelsen Creative Commons Attribution