blob: edcc75d2b7c459859654e7dd99db01c5fe6b352b [file] [log] [blame] [edit]
// Copyright 2019 The PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdint.h>
#include <memory>
#include "core/fxcrt/fx_string.h"
#include "fpdfsdk/cpdfsdk_helpers.h"
#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
#include "fxjs/xfa/cfxjse_engine.h"
#include "fxjs/xfa/cfxjse_value.h"
#include "public/fpdf_formfill.h"
#include "testing/fuzzers/pdfium_fuzzer_helper.h"
#include "v8/include/v8.h"
#include "xfa/fxfa/cxfa_eventparam.h"
namespace {
// testing/resources/simple_xfa.pdf
const uint8_t kSimpleXfaPdfData[] = {
0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x37, 0x0a, 0x25, 0xa0, 0xf2,
0xa4, 0xf4, 0x0a, 0x31, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c,
0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x41, 0x63, 0x72, 0x6f, 0x46, 0x6f, 0x72,
0x6d, 0x20, 0x32, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x45,
0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3c, 0x3c,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x41, 0x44, 0x42, 0x45, 0x20, 0x3c,
0x3c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x42, 0x61, 0x73,
0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x2f, 0x31, 0x2e,
0x37, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x45, 0x78, 0x74,
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x20,
0x38, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3e, 0x3e, 0x0a, 0x20, 0x20, 0x3e,
0x3e, 0x0a, 0x20, 0x20, 0x2f, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x52, 0x65,
0x6e, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x72, 0x75, 0x65,
0x0a, 0x20, 0x20, 0x2f, 0x50, 0x61, 0x67, 0x65, 0x73, 0x20, 0x38, 0x20,
0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70, 0x65, 0x20,
0x2f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x0a, 0x3e, 0x3e, 0x0a,
0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x32, 0x20, 0x30, 0x20, 0x6f,
0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x58, 0x46, 0x41,
0x20, 0x5b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x70, 0x72, 0x65, 0x61,
0x6d, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x33, 0x20,
0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x34, 0x20, 0x30,
0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x74, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x35, 0x20,
0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x6c, 0x6f, 0x63,
0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x36, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x28, 0x70,
0x6f, 0x73, 0x74, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x37, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x5d, 0x0a,
0x3e, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x33, 0x20,
0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f,
0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x31, 0x32, 0x34, 0x0a, 0x3e,
0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x78, 0x64,
0x70, 0x3a, 0x78, 0x64, 0x70, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a,
0x78, 0x64, 0x70, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x78, 0x64, 0x70, 0x2f, 0x22, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x53,
0x74, 0x61, 0x6d, 0x70, 0x3d, 0x22, 0x32, 0x30, 0x31, 0x38, 0x2d, 0x30,
0x32, 0x2d, 0x32, 0x33, 0x54, 0x32, 0x31, 0x3a, 0x33, 0x37, 0x3a, 0x31,
0x31, 0x5a, 0x22, 0x20, 0x75, 0x75, 0x69, 0x64, 0x3d, 0x22, 0x32, 0x31,
0x34, 0x38, 0x32, 0x37, 0x39, 0x38, 0x2d, 0x37, 0x62, 0x66, 0x30, 0x2d,
0x34, 0x30, 0x61, 0x34, 0x2d, 0x62, 0x63, 0x35, 0x64, 0x2d, 0x33, 0x63,
0x65, 0x66, 0x64, 0x63, 0x63, 0x66, 0x33, 0x32, 0x62, 0x35, 0x22, 0x3e,
0x0a, 0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65,
0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x34, 0x20, 0x30, 0x20, 0x6f, 0x62,
0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67,
0x74, 0x68, 0x20, 0x36, 0x34, 0x32, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74,
0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f,
0x72, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x63,
0x69, 0x2f, 0x33, 0x2e, 0x30, 0x2f, 0x22, 0x3e, 0x0a, 0x3c, 0x61, 0x67,
0x65, 0x6e, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65,
0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c,
0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e,
0x70, 0x64, 0x66, 0x3c, 0x2f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x70, 0x64, 0x66,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, 0x6f, 0x6e, 0x74, 0x49,
0x6e, 0x66, 0x6f, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x70, 0x64,
0x66, 0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x3e, 0x0a,
0x3c, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x3e, 0x0a, 0x20, 0x20,
0x3c, 0x70, 0x64, 0x66, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x31, 0x2e, 0x37, 0x3c, 0x2f,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e,
0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3e, 0x38, 0x3c,
0x2f, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73,
0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c,
0x69, 0x63, 0x79, 0x3e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x3c, 0x2f,
0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x73, 0x63, 0x72, 0x69, 0x70,
0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x3e, 0x58, 0x46, 0x41, 0x3c, 0x2f,
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x61,
0x63, 0x74, 0x69, 0x76, 0x65, 0x3e, 0x31, 0x3c, 0x2f, 0x69, 0x6e, 0x74,
0x65, 0x72, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x3e, 0x0a, 0x20, 0x20,
0x3c, 0x2f, 0x70, 0x64, 0x66, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x78, 0x64,
0x70, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x73, 0x3e, 0x2a, 0x3c, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x78, 0x64, 0x70, 0x3e,
0x0a, 0x20, 0x20, 0x3c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x3e, 0x70, 0x64, 0x66, 0x3c, 0x2f, 0x64, 0x65, 0x73,
0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
0x3c, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x72, 0x75, 0x6e, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73,
0x3e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3c, 0x2f, 0x72, 0x75, 0x6e,
0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c,
0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x3e, 0x0a, 0x3c, 0x2f, 0x70,
0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x3e, 0x0a, 0x3c, 0x61, 0x63, 0x72,
0x6f, 0x62, 0x61, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x61, 0x63, 0x72,
0x6f, 0x62, 0x61, 0x74, 0x37, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x52, 0x65, 0x6e, 0x64, 0x65,
0x72, 0x3e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3c, 0x2f,
0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x52, 0x65, 0x6e, 0x64, 0x65,
0x72, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x61, 0x63, 0x72, 0x6f, 0x62,
0x61, 0x74, 0x37, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x65, 0x3e, 0x70, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d,
0x69, 0x74, 0x3c, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
0x3e, 0x0a, 0x3c, 0x2f, 0x61, 0x63, 0x72, 0x6f, 0x62, 0x61, 0x74, 0x3e,
0x0a, 0x3c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3e, 0x0a, 0x65,
0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64,
0x6f, 0x62, 0x6a, 0x0a, 0x35, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20,
0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68,
0x20, 0x34, 0x38, 0x32, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65,
0x61, 0x6d, 0x0a, 0x3c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70,
0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f,
0x72, 0x67, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x66,
0x61, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x33,
0x2e, 0x33, 0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x73, 0x75, 0x62,
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66,
0x6f, 0x72, 0x6d, 0x31, 0x22, 0x20, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74,
0x3d, 0x22, 0x74, 0x62, 0x22, 0x20, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72,
0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x3d, 0x22, 0x61, 0x75, 0x74, 0x6f,
0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x70, 0x61, 0x67, 0x65,
0x53, 0x65, 0x74, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x70, 0x61, 0x67, 0x65, 0x41, 0x72, 0x65, 0x61, 0x20, 0x6e, 0x61, 0x6d,
0x65, 0x3d, 0x22, 0x50, 0x61, 0x67, 0x65, 0x31, 0x22, 0x20, 0x69, 0x64,
0x3d, 0x22, 0x50, 0x61, 0x67, 0x65, 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x6f, 0x6e, 0x74, 0x65,
0x6e, 0x74, 0x41, 0x72, 0x65, 0x61, 0x20, 0x78, 0x3d, 0x22, 0x30, 0x2e,
0x32, 0x35, 0x69, 0x6e, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x30, 0x2e, 0x32,
0x35, 0x69, 0x6e, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x38, 0x69, 0x6e, 0x22,
0x20, 0x68, 0x3d, 0x22, 0x31, 0x30, 0x2e, 0x35, 0x69, 0x6e, 0x22, 0x20,
0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x70,
0x61, 0x67, 0x65, 0x41, 0x72, 0x65, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x2f, 0x70, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e,
0x61, 0x6d, 0x65, 0x3d, 0x22, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65,
0x6c, 0x64, 0x31, 0x22, 0x20, 0x79, 0x3d, 0x22, 0x33, 0x31, 0x2e, 0x37,
0x35, 0x6d, 0x6d, 0x22, 0x20, 0x78, 0x3d, 0x22, 0x34, 0x34, 0x2e, 0x34,
0x35, 0x6d, 0x6d, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x31, 0x31, 0x34, 0x2e,
0x32, 0x39, 0x31, 0x6d, 0x6d, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x31, 0x32,
0x2e, 0x37, 0x6d, 0x6d, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
0x22, 0x54, 0x65, 0x78, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x31, 0x31,
0x22, 0x20, 0x79, 0x3d, 0x22, 0x32, 0x32, 0x32, 0x2e, 0x32, 0x35, 0x6d,
0x6d, 0x22, 0x20, 0x78, 0x3d, 0x22, 0x34, 0x34, 0x2e, 0x34, 0x35, 0x6d,
0x6d, 0x22, 0x20, 0x77, 0x3d, 0x22, 0x38, 0x32, 0x2e, 0x35, 0x35, 0x6d,
0x6d, 0x22, 0x20, 0x68, 0x3d, 0x22, 0x31, 0x32, 0x2e, 0x37, 0x6d, 0x6d,
0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x66, 0x69, 0x65,
0x6c, 0x64, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f, 0x73, 0x75, 0x62, 0x66,
0x6f, 0x72, 0x6d, 0x3e, 0x0a, 0x3c, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65,
0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x36, 0x20,
0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f,
0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x33, 0x34, 0x35, 0x35, 0x0a,
0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x3c, 0x6c,
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x20, 0x78, 0x6d, 0x6c,
0x6e, 0x73, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77,
0x77, 0x77, 0x2e, 0x78, 0x66, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x73,
0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x78, 0x66, 0x61, 0x2d, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2f, 0x32, 0x2e, 0x37,
0x2f, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x65, 0x6e, 0x5f, 0x55,
0x53, 0x22, 0x20, 0x64, 0x65, 0x73, 0x63, 0x3d, 0x22, 0x45, 0x6e, 0x67,
0x6c, 0x69, 0x73, 0x68, 0x20, 0x28, 0x55, 0x6e, 0x69, 0x74, 0x65, 0x64,
0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x29, 0x22, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72,
0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x3d, 0x22, 0x67, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0x6e, 0x22,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e,
0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x46, 0x65, 0x62, 0x72, 0x75,
0x61, 0x72, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
0x74, 0x68, 0x3e, 0x4d, 0x61, 0x72, 0x63, 0x68, 0x3c, 0x2f, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41, 0x70, 0x72, 0x69,
0x6c, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x3e, 0x4d, 0x61, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6e, 0x65, 0x3c, 0x2f, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6c, 0x79,
0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e,
0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74,
0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d,
0x62, 0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e,
0x74, 0x68, 0x3e, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, 0x72, 0x3c, 0x2f,
0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4e, 0x6f,
0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74,
0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x44, 0x65, 0x63, 0x65, 0x6d, 0x62,
0x65, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73,
0x20, 0x61, 0x62, 0x62, 0x72, 0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
0x68, 0x3e, 0x4a, 0x61, 0x6e, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x46, 0x65, 0x62, 0x3c, 0x2f, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4d, 0x61, 0x72, 0x3c,
0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41,
0x70, 0x72, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
0x68, 0x3e, 0x4d, 0x61, 0x79, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6e, 0x3c, 0x2f, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4a, 0x75, 0x6c, 0x3c,
0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x41,
0x75, 0x67, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74,
0x68, 0x3e, 0x53, 0x65, 0x70, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4f, 0x63, 0x74, 0x3c, 0x2f, 0x6d, 0x6f,
0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x4e, 0x6f, 0x76, 0x3c,
0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x44,
0x65, 0x63, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6d, 0x6f, 0x6e, 0x74, 0x68,
0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x64, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
0x3e, 0x53, 0x75, 0x6e, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
0x61, 0x79, 0x3e, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64,
0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x64, 0x61, 0x79, 0x3e, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79,
0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x57, 0x65, 0x64, 0x6e,
0x65, 0x73, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
0x3e, 0x54, 0x68, 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64,
0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x64, 0x61, 0x79, 0x3e, 0x46, 0x72, 0x69, 0x64, 0x61, 0x79, 0x3c,
0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x53, 0x61, 0x74, 0x75, 0x72,
0x64, 0x61, 0x79, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x4e, 0x61, 0x6d,
0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x62, 0x62, 0x72,
0x3d, 0x22, 0x31, 0x22, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x53, 0x75, 0x6e, 0x3c, 0x2f,
0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x64, 0x61, 0x79, 0x3e, 0x4d, 0x6f, 0x6e, 0x3c, 0x2f, 0x64,
0x61, 0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x64, 0x61, 0x79, 0x3e, 0x54, 0x75, 0x65, 0x3c, 0x2f, 0x64, 0x61,
0x79, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x64, 0x61, 0x79, 0x3e, 0x57, 0x65, 0x64, 0x3c, 0x2f, 0x64, 0x61, 0x79,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64,
0x61, 0x79, 0x3e, 0x54, 0x68, 0x75, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61,
0x79, 0x3e, 0x46, 0x72, 0x69, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x79,
0x3e, 0x53, 0x61, 0x74, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x79, 0x4e, 0x61,
0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x41, 0x4d, 0x3c,
0x2f, 0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x65, 0x72, 0x69,
0x64, 0x69, 0x65, 0x6d, 0x3e, 0x50, 0x4d, 0x3c, 0x2f, 0x6d, 0x65, 0x72,
0x69, 0x64, 0x69, 0x65, 0x6d, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x2f, 0x6d, 0x65, 0x72, 0x69, 0x64, 0x69, 0x65, 0x6d, 0x4e,
0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x65, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x72, 0x61, 0x3e,
0x42, 0x43, 0x3c, 0x2f, 0x65, 0x72, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x65, 0x72, 0x61, 0x3e, 0x41, 0x44,
0x3c, 0x2f, 0x65, 0x72, 0x61, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x2f, 0x65, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x61, 0x6c, 0x65, 0x6e,
0x64, 0x61, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74,
0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c,
0x22, 0x3e, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d,
0x20, 0x44, 0x2c, 0x20, 0x59, 0x59, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61,
0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61,
0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
0x6c, 0x6f, 0x6e, 0x67, 0x22, 0x3e, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x44,
0x2c, 0x20, 0x59, 0x59, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65,
0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65,
0x64, 0x22, 0x3e, 0x4d, 0x4d, 0x4d, 0x20, 0x44, 0x2c, 0x20, 0x59, 0x59,
0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x22,
0x3e, 0x4d, 0x2f, 0x44, 0x2f, 0x59, 0x59, 0x3c, 0x2f, 0x64, 0x61, 0x74,
0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x74, 0x74,
0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74,
0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65,
0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x3d, 0x22, 0x66, 0x75, 0x6c, 0x6c, 0x22, 0x3e, 0x68, 0x3a, 0x4d, 0x4d,
0x3a, 0x53, 0x53, 0x20, 0x41, 0x20, 0x5a, 0x3c, 0x2f, 0x74, 0x69, 0x6d,
0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74,
0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6c,
0x6f, 0x6e, 0x67, 0x22, 0x3e, 0x68, 0x3a, 0x4d, 0x4d, 0x3a, 0x53, 0x53,
0x20, 0x41, 0x20, 0x5a, 0x3c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61,
0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d, 0x65, 0x64, 0x22,
0x3e, 0x68, 0x3a, 0x4d, 0x4d, 0x3a, 0x53, 0x53, 0x20, 0x41, 0x3c, 0x2f,
0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x69, 0x6d, 0x65,
0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x3d, 0x22, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x22, 0x3e, 0x68, 0x3a, 0x4d,
0x4d, 0x20, 0x41, 0x3c, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74,
0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f,
0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x64, 0x61, 0x74, 0x65, 0x54,
0x69, 0x6d, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x47,
0x79, 0x4d, 0x64, 0x6b, 0x48, 0x6d, 0x73, 0x53, 0x45, 0x44, 0x46, 0x77,
0x57, 0x61, 0x68, 0x4b, 0x7a, 0x5a, 0x3c, 0x2f, 0x64, 0x61, 0x74, 0x65,
0x54, 0x69, 0x6d, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x50,
0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
0x22, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x22, 0x3e, 0x7a, 0x2c,
0x7a, 0x7a, 0x39, 0x2e, 0x7a, 0x7a, 0x7a, 0x3c, 0x2f, 0x6e, 0x75, 0x6d,
0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65,
0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x6e, 0x61, 0x6d,
0x65, 0x3d, 0x22, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22,
0x3e, 0x24, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x2e, 0x39, 0x39, 0x7c, 0x28,
0x24, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x2e, 0x39, 0x39, 0x29, 0x3c, 0x2f,
0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72,
0x6e, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e,
0x74, 0x22, 0x3e, 0x7a, 0x2c, 0x7a, 0x7a, 0x39, 0x25, 0x3c, 0x2f, 0x6e,
0x75, 0x6d, 0x62, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62,
0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53,
0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d,
0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65,
0x63, 0x69, 0x6d, 0x61, 0x6c, 0x22, 0x3e, 0x2e, 0x3c, 0x2f, 0x6e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65,
0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x3d, 0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x3e,
0x2c, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d,
0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x70, 0x65, 0x72, 0x63, 0x65,
0x6e, 0x74, 0x22, 0x3e, 0x25, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65,
0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x79,
0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x6d,
0x69, 0x6e, 0x75, 0x73, 0x22, 0x3e, 0x2d, 0x3c, 0x2f, 0x6e, 0x75, 0x6d,
0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d,
0x22, 0x7a, 0x65, 0x72, 0x6f, 0x22, 0x3e, 0x30, 0x3c, 0x2f, 0x6e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x73,
0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x22, 0x3e, 0x24, 0x3c, 0x2f, 0x63, 0x75,
0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x75, 0x72,
0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20,
0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x69, 0x73, 0x6f, 0x6e, 0x61, 0x6d,
0x65, 0x22, 0x3e, 0x55, 0x53, 0x44, 0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72,
0x65, 0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x75, 0x72, 0x72, 0x65,
0x6e, 0x63, 0x79, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x22,
0x3e, 0x2e, 0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79,
0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x79,
0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c,
0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x73, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4d, 0x79, 0x72,
0x69, 0x61, 0x64, 0x20, 0x50, 0x72, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x4d, 0x69, 0x6e,
0x69, 0x6f, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x22, 0x2f, 0x3e, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61,
0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x43, 0x6f, 0x75,
0x72, 0x69, 0x65, 0x72, 0x20, 0x53, 0x74, 0x64, 0x22, 0x2f, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66,
0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64,
0x6f, 0x62, 0x65, 0x20, 0x50, 0x69, 0x20, 0x53, 0x74, 0x64, 0x22, 0x2f,
0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70,
0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22,
0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x48, 0x65, 0x62, 0x72, 0x65, 0x77,
0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74,
0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65,
0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x41, 0x72, 0x61, 0x62,
0x69, 0x63, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x54, 0x68,
0x61, 0x69, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x4b, 0x6f, 0x7a, 0x75, 0x6b, 0x61, 0x20, 0x47,
0x6f, 0x74, 0x68, 0x69, 0x63, 0x20, 0x50, 0x72, 0x6f, 0x2d, 0x56, 0x49,
0x20, 0x4d, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x4b, 0x6f, 0x7a, 0x75, 0x6b, 0x61, 0x20, 0x4d,
0x69, 0x6e, 0x63, 0x68, 0x6f, 0x20, 0x50, 0x72, 0x6f, 0x2d, 0x56, 0x49,
0x20, 0x52, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x4d, 0x69,
0x6e, 0x67, 0x20, 0x53, 0x74, 0x64, 0x20, 0x4c, 0x22, 0x2f, 0x3e, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x74, 0x79, 0x70, 0x65, 0x66,
0x61, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64,
0x6f, 0x62, 0x65, 0x20, 0x53, 0x6f, 0x6e, 0x67, 0x20, 0x53, 0x74, 0x64,
0x20, 0x4c, 0x22, 0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x3c, 0x74, 0x79, 0x70, 0x65, 0x66, 0x61, 0x63, 0x65, 0x20, 0x6e, 0x61,
0x6d, 0x65, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x4d, 0x79,
0x75, 0x6e, 0x67, 0x6a, 0x6f, 0x20, 0x53, 0x74, 0x64, 0x20, 0x4d, 0x22,
0x2f, 0x3e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x2f, 0x74, 0x79, 0x70,
0x65, 0x66, 0x61, 0x63, 0x65, 0x73, 0x3e, 0x0a, 0x20, 0x20, 0x3c, 0x2f,
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x3e, 0x0a, 0x3c, 0x2f, 0x6c, 0x6f,
0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x3e, 0x0a, 0x65, 0x6e, 0x64,
0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62,
0x6a, 0x0a, 0x37, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20, 0x3c, 0x3c,
0x0a, 0x20, 0x20, 0x2f, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x31,
0x31, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a,
0x3c, 0x2f, 0x78, 0x64, 0x70, 0x3a, 0x78, 0x64, 0x70, 0x3e, 0x0a, 0x65,
0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x0a, 0x65, 0x6e, 0x64,
0x6f, 0x62, 0x6a, 0x0a, 0x38, 0x20, 0x30, 0x20, 0x6f, 0x62, 0x6a, 0x20,
0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70, 0x65, 0x20, 0x2f,
0x50, 0x61, 0x67, 0x65, 0x73, 0x0a, 0x20, 0x20, 0x2f, 0x43, 0x6f, 0x75,
0x6e, 0x74, 0x20, 0x31, 0x0a, 0x20, 0x20, 0x2f, 0x4b, 0x69, 0x64, 0x73,
0x20, 0x5b, 0x39, 0x20, 0x30, 0x20, 0x52, 0x5d, 0x0a, 0x3e, 0x3e, 0x0a,
0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a, 0x39, 0x20, 0x30, 0x20, 0x6f,
0x62, 0x6a, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x54, 0x79, 0x70,
0x65, 0x20, 0x2f, 0x50, 0x61, 0x67, 0x65, 0x0a, 0x20, 0x20, 0x2f, 0x50,
0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x32, 0x20, 0x30, 0x20, 0x52, 0x0a,
0x20, 0x20, 0x2f, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x42, 0x6f, 0x78, 0x20,
0x5b, 0x30, 0x20, 0x30, 0x20, 0x36, 0x31, 0x32, 0x20, 0x37, 0x39, 0x32,
0x5d, 0x0a, 0x3e, 0x3e, 0x0a, 0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a, 0x0a,
0x78, 0x72, 0x65, 0x66, 0x0a, 0x30, 0x20, 0x31, 0x30, 0x0a, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x36, 0x35, 0x35,
0x33, 0x35, 0x20, 0x66, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x31, 0x35, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x39, 0x39,
0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x35, 0x38, 0x20, 0x30, 0x30, 0x30,
0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x35, 0x33, 0x34, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x32, 0x32, 0x38,
0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x31, 0x37, 0x36, 0x32, 0x20, 0x30, 0x30, 0x30,
0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x35, 0x32, 0x37, 0x30, 0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e,
0x20, 0x0a, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x33, 0x33, 0x32,
0x20, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x30, 0x30,
0x30, 0x30, 0x30, 0x30, 0x35, 0x33, 0x39, 0x35, 0x20, 0x30, 0x30, 0x30,
0x30, 0x30, 0x20, 0x6e, 0x20, 0x0a, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65,
0x72, 0x20, 0x3c, 0x3c, 0x0a, 0x20, 0x20, 0x2f, 0x52, 0x6f, 0x6f, 0x74,
0x20, 0x31, 0x20, 0x30, 0x20, 0x52, 0x0a, 0x20, 0x20, 0x2f, 0x53, 0x69,
0x7a, 0x65, 0x20, 0x31, 0x30, 0x0a, 0x3e, 0x3e, 0x0a, 0x73, 0x74, 0x61,
0x72, 0x74, 0x78, 0x72, 0x65, 0x66, 0x0a, 0x35, 0x34, 0x37, 0x32, 0x0a,
0x25, 0x25, 0x45, 0x4f, 0x46, 0x0a};
} // namespace
class PDFiumFormCalcContextFuzzer : public PDFiumFuzzerHelper {
public:
PDFiumFormCalcContextFuzzer(const uint8_t* data, size_t size)
: data_(data), size_(size) {}
~PDFiumFormCalcContextFuzzer() override = default;
int GetFormCallbackVersion() const override { return 2; }
// Return false if XFA doesn't load as otherwise we're duplicating the work
// done by the non-xfa fuzzer.
bool OnFormFillEnvLoaded(FPDF_DOCUMENT doc) override {
return FPDF_LoadXFA(doc);
}
void OnRenderFinished(FPDF_DOCUMENT doc) override {
auto* context = static_cast<CPDFXFA_Context*>(
CPDFDocumentFromFPDFDocument(doc)->GetExtension());
CXFA_Document* xfa_document = context->GetXFADoc()->GetXFADoc();
CFXJSE_Engine* script_context = xfa_document->GetScriptContext();
CXFA_EventParam params;
params.m_bCancelAction = false;
script_context->SetEventParam(&params);
ByteStringView data_view(data_, size_);
auto value = std::make_unique<CFXJSE_Value>();
script_context->RunScript(CXFA_Script::Type::Formcalc,
WideString::FromUTF8(data_view).AsStringView(),
value.get(), xfa_document->GetRoot());
script_context->SetEventParam(nullptr);
}
private:
const uint8_t* data_;
size_t size_;
};
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
PDFiumFormCalcContextFuzzer fuzzer(data, size);
fuzzer.RenderPdf(reinterpret_cast<const char*>(kSimpleXfaPdfData),
sizeof(kSimpleXfaPdfData));
return 0;
}