{{header}}
{{object 1 0}} <<
  /Type /Catalog
  /Pages 2 0 R
  /OpenAction 10 0 R
>>
endobj
{{object 2 0}} <<
  /Type /Pages
  /Count 4
  /Kids [
    3 0 R
    4 0 R
    5 0 R
    6 0 R
  ]
>>
endobj
% Page number 0.
{{object 3 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
% Page number 1.
{{object 4 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
% Page number 2.
{{object 5 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>
% Page number 3.
{{object 6 0}} <<
  /Type /Page
  /Parent 2 0 R
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /MediaBox [0 0 612 792]
>>

% Info
{{object 9 0}} <<
  /Author (Joe Random Author)
  /Creator (Joe Random Creator)
>>
endobj
% OpenAction action
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
% JS program to exexute
{{object 11 0}} <<
>>
stream
var app_props = [
  'activeDocs',
  'calculate',
  'formsVersion',
  'fs',
  'fullscreen',
  'language',
  'media',
  'platform',
  'runtimeHighlight',
  'viewerType',
  'viewerVariation',
  'viewerVersion'
];

function testGetProps(props) {
  app.alert('*** Getting properties ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "app." + props[i];
      var expr2 = "typeof " + expr1;
      app.alert(expr1 + " is " + eval(expr2) + ' ' + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

function testSetProps(props) {
  app.alert('*** Setting properties ***');
  for (var i = 0; i < props.length; ++i) {
    try {
      var expr1 = "app." + props[i] + ' = 3;'
      app.alert(expr1 + " yields " + eval(expr1));
    } catch (e) {
      app.alert("ERROR: " + e.toString());
    }
  }
}

testGetProps(app_props);
testSetProps(app_props);
testGetProps(app_props);
endstream
endobj
{{xref}}
trailer <<
  /Root 1 0 R
  /Info 9 0 R
>>
{{startxref}}
%%EOF