zoukankan      html  css  js  c++  java
  • QQ四国军旗刷分外挂开发

      作为一名四国军旗的爱好者,军旗也陪伴我一起度过了许多时间,让我不至过于无聊、郁闷。。也因此对她产生了不一般的感情。。于是乎有了下面的进一步接触过程(研究写刷分软件)。。。

    效果图:

    一、数据准备

    QQ四国军旗刷分外挂数据准备
                      ——BlackSnake  2011.06.19

    1. 游戏版本号:(进入游戏时的窗口标题)
     QQ游戏-四国军旗角色版 2.1 Beta06 Build020

    2. QQ号地址:(用CE内存查看器获得)
       004C7BE0 或00494520

    3. 座位号内存地址:(用CE内存查看器获得)
       004C7BEC 或00C54579 (下(蓝)、左(绿)、上(紫)、右(黄) 分别对应0、1、2、3)

    4. 从棋盘布局文件分析得各子的代码(16进制):(用二进制编辑工具UltraEdit)
    军旗: 02   地雷: 03    炸弹: 04    司令: 05    军长: 06   师长: 07    旅长: 08    团长: 09 

    营长: 0A   连长:0B    排长:0C    工兵:0D     军营: 00

    5. 分析得到棋盘是17*17的数组(行列最小最大值及每格棋子的间距)(借助SPY++工具)
           xMin:200, xMax: 840,  xsep:40
           ymin:70 , yMax: 710  ,ystep:40

    6. 各按钮位置:(借助SPY++工具)
        开局:xPos:863,yPos:607; Lparam:x025F035F
        投降:XPos:856,yPos:659; LParam:x02930358

    7. 重复下棋的位置测定:
     (初测每格差 40 相素)
           棋子第一格的位置: xPos:428,yPos:498; 左上营:xPos:470,yPos:539;
               第一格的上一格:xPos:431,yPos:462  上格的左边格:xPos:391,yPos:459;
               第二格:xPos:436,yPos:502
               第三格:xPos:434,yPos:540
               第四格:xPos:432,yPos:581


    8. 下棋的步数地址(用来控制30步以上即可投降):(用CE内存查看器获得)
        $004C7C30

    9. 计时器地址(可以确定轮到谁下棋):(用CE内存查看器获得)
        $00494D40


    10. 投降时产生的窗口(是一级窗口),其中的投降待确认提示文本:您确定要投降吗?

    11. 投降后产生的窗口(是游戏窗口的子窗口),投降后提示文本:投降,全军覆没

    二、原代码(因为以前写过老版本的,所以就先套下来了,试了下能用,就先贴上来)

                 ——望路过的大哥多指点一二!!!

    //工程文件

    1 program pMain;
    2
    3 uses
    4 Forms,
    5 uMain in 'uMain.pas' {frmMain},
    6 uCustomProc in 'uCustomProc.pas',
    7 uHelp in 'uHelp.pas' {frmHelp},
    8 uRegister in 'uRegister.pas' {frmRegister};
    9
    10 {$R *.res}
    11
    12 begin
    13 Application.Initialize;
    14 fInst := ExistsInst;
    15 Application.Title := 'QQ四国军旗刷分器';
    16 Application.CreateForm(TfrmMain, frmMain);
    17 Application.Run;
    18 end.

    //主单元文件

    unit uMain;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Registry;

    type
    TfrmMain
    = class(TForm)
    Label1: TLabel;
    edtDir: TEdit;
    btnAutoPlay: TButton;
    cbbWinner: TComboBox;
    cbAutoContinuous: TCheckBox;
    cbHide: TCheckBox;
    pnlTitle: TPanel;
    cbSmart: TCheckBox;
    odSetDir: TOpenDialog;
    sbSetDir: TSpeedButton;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    rgModel: TRadioGroup;
    Label2: TLabel;
    cbbLoser: TComboBox;
    btnExit: TButton;
    cbAddSpeed: TCheckBox;
    bbtnHelp: TBitBtn;
    Image1: TImage;
    sbRegister: TStatusBar;
    bbtnRegister: TBitBtn;
    procedure bbtnHelpClick(Sender: TObject);
    procedure bbtnRegisterClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnAutoPlayClick(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure cbAddSpeedClick(Sender: TObject);
    procedure cbAutoContinuousClick(Sender: TObject);
    procedure cbbLoserDropDown(Sender: TObject);
    procedure cbbLoserKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure cbbLoserKeyPress(Sender: TObject; var Key: Char);
    procedure cbbWinnerDropDown(Sender: TObject);
    procedure cbbWinnerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure cbbWinnerKeyPress(Sender: TObject; var Key: Char);
    procedure cbHideClick(Sender: TObject);
    procedure cbSmartClick(Sender: TObject);
    procedure rgModelClick(Sender: TObject);
    procedure sbSetDirClick(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    frmMain: TfrmMain;
    hThread1, hThread2: THandle;
    bVerfyed : Boolean;
    WinnerQQ, LoserQQ: Int64;

    implementation

    {$R *.dfm}

    uses uCustomProc, uHelp, uRegister;


    {线程入口函数}
    function MyThreadFun(p: Pointer): DWORD; stdcall;
    begin
    cTimes1 :
    = 0; //控制两组下棋速度的同步
    cTimes2 :
    = 0;
    if Integer(p) = 1 then
    begin
    while True do
    begin
    Inc(cTimes1);
    AutoPlay(
    1);
    if ChessFlag = False then Break;
    if Length(hChess) = 4 then
    begin
    if cTimes1 - cTimes2 >= 2 then
    Sleep(
    1000);
    end;
    end;
    end else
    if Integer(p) = 2 then
    begin
    while True do
    begin
    Inc(cTimes1);
    SmartPlay(hChess[
    0],hChess[1],0);
    if ChessFlag = False then Break; //控制是否连续刷分
    if Length(hChess) = 4 then
    begin
    if cTimes1 - cTimes2 >= 2 then
    Sleep(
    1000);
    end;
    end;
    end else
    if Integer(p) = 11 then
    begin
    while True do
    begin
    Inc(cTimes2);
    AutoPlay(
    2);
    if ChessFlag = False then Break; //控制是否连续刷分
    if Length(hChess) = 4 then
    begin
    if cTimes2 - cTimes1 >= 2 then
    Sleep(
    1000);
    end;
    end;
    end else
    if Integer(p) = 22 then
    begin
    while True do
    begin
    Inc(cTimes2);
    SmartPlay(hChess[
    2],hChess[3],1);
    if ChessFlag = False then Break;
    if Length(hChess) = 4 then
    begin
    if cTimes2 - cTimes1 >= 2 then
    Sleep(
    1000);
    end;
    end;
    end;
    //恢复设置
    frmmain.btnAutoPlay.Enabled :
    = True;
    frmMain.cbbWinner.Enabled :
    = True;
    frmMain.cbbWinner.Text :
    = '';
    frmMain.cbSmart.Enabled :
    = True;
    frmMain.rgModel.Enabled :
    = True;
    if frmMain.rgModel.ItemIndex = 1 then frmMain.cbbLoser.Enabled := True;
    Result :
    = 0;
    if (Integer(p) <= 2 ) then CloseHandle(hThread1);
    if (Integer(p) >= 11) then CloseHandle(hThread2);
    end;

    procedure TfrmMain.bbtnHelpClick(Sender: TObject);
    begin
    with TfrmHelp.Create(nil) do
    try
    ShowModal;
    finally
    free;
    end;
    end;

    procedure TfrmMain.bbtnRegisterClick(Sender: TObject);
    begin
    with TfrmRegister.Create(nil) do
    try
    bVerfyed :
    = (ShowModal = 1);
    if bVerfyed then
    begin
    sbRegister.Panels[
    0].Text := '已注册,可使用全部功能';
    cbSmart.Enabled :
    = True;
    cbAddSpeed.Enabled :
    = True;
    cbAutoContinuous.Enabled :
    = True;
    cbHide.Enabled :
    = True;
    bbtnRegister.Enabled :
    = False;
    end;
    finally
    free;
    end;
    end;

    procedure TfrmMain.FormDestroy(Sender: TObject);
    begin
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    end;

    procedure TfrmMain.FormCreate(Sender: TObject);
    var
    reg: TRegistry;
    sUser, sPsw :
    string;
    begin
    bVerfyed :
    = False;
    reg :
    = TRegistry.Create;
    try
    reg.RootKey :
    = HKEY_CURRENT_USER;
    reg.OpenKey(
    '\Software\ShiGuoSF',True);
    sUser :
    = reg.ReadString('user');
    sPsw :
    = reg.ReadString('password');
    finally
    reg.CloseKey;
    reg.Free;
    end;
    if (Length(Trim(sUser)) <> 8) or (Length(Trim(sPsw)) <> 16) then bVerfyed := False
    else if Encrypt(sUser) = Trim(sPsw) then bVerfyed := True;

    //设置状态栏
    if not bVerfyed then
    begin
    sbRegister.Panels[
    0].Text := '未注册,功能受限...';
    cbSmart.Enabled :
    = False;
    cbAddSpeed.Enabled :
    = False;
    cbAutoContinuous.Enabled :
    = False;
    cbHide.Enabled :
    = False;
    end else
    begin
    sbRegister.Panels[
    0].Text := '已注册,可使用全部功能';
    cbSmart.Enabled :
    = True;
    cbAddSpeed.Enabled :
    = True;
    cbAutoContinuous.Enabled :
    = True;
    cbHide.Enabled :
    = True;
    bbtnRegister.Enabled :
    = False;
    end;
    sbRegister.Panels[
    1].Text := ' 作者:BlackSnake';
    SendMessage(Handle, MB_TOPMOST,
    0, 0);
    cbbWinner.Style :
    = csDropDown;
    edtDir.Enabled :
    = False;
    sbSetDir.Enabled :
    = False;
    cbbLoser.Enabled :
    = False;
    fSpeed :
    = False;
    //初始化是否存在已运行实例
    if fInst then GetHwnd(Handle);

    end;

    procedure TfrmMain.btnAutoPlayClick(Sender: TObject);
    var
    ID: DWORD;
    begin
    if rgModel.ItemIndex = 0 then
    begin
    if cbbWinner.Text = '' then
    begin
    ShowMessage(
    '请选择要赢分的QQ号后再继续!');
    Exit;
    end;
    end else
    if (cbbWinner.Text = '') or (cbbLoser.Text = '') then
    begin
    ShowMessage(
    '请设置好输赢分的QQ号后再继续!');
    Exit;
    end;

    WinnerQQ :
    = StrToInt64(cbbWinner.Text);
    cbbWinner.Enabled :
    = False;
    //键状态设置
    if rgModel.ItemIndex = 1 then
    begin
    LoserQQ :
    = StrtoInt64(cbbLoser.Text);
    cbbLoser.Enabled :
    = False;
    end;
    rgModel.Enabled :
    = false;
    cbSmart.Enabled :
    = False;
    btnAutoPlay.Enabled :
    = False;
    fPause :
    = false;
    if cbAutoContinuous.Checked then Chessflag := True else ChessFlag := False;
    //确定每个游戏窗口句柄
    EnsureHwnd(WinnerQQ, LoserQQ);
    //单组两人游戏
    if rgModel.ItemIndex = 0 then
    begin
    if not cbSmart.Checked then hThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(1), 0, ID)
    else hThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(2), 0, ID);
    end else
    begin
    if not cbSmart.Checked then
    begin
    hThread1 :
    = CreateThread(nil, 0, @MyThreadFun, Ptr(1), 0, ID);
    Sleep(
    1500);
    hThread2 :
    = CreateThread(nil, 0, @MyThreadFun, Ptr(11), 0, ID);
    end else
    begin
    hThread1 :
    = CreateThread(nil, 0, @MyThreadFun, Ptr(2), 0, ID);
    Sleep(
    1500);
    hThread2 :
    = CreateThread(nil, 0, @MyThreadFun, Ptr(22), 0, ID);
    end;
    end;

    end;

    procedure TfrmMain.btnExitClick(Sender: TObject);
    begin
    Close;
    end;

    procedure TfrmMain.cbAddSpeedClick(Sender: TObject);
    begin
    fSpeed :
    = cbAddSpeed.Checked;
    end;

    {测试按钮2}
    procedure TfrmMain.cbAutoContinuousClick(Sender: TObject);
    begin
    ChessFlag :
    = cbAutoContinuous.Checked;
    end;

    procedure TfrmMain.cbbLoserDropDown(Sender: TObject);
    var
    id, i : Byte;
    dwQQNum: Cardinal;
    begin
    if cbbWinner.Text = '' then
    begin
    ShowMessage(
    '请先设置赢分的QQ号!');
    Exit;
    end;
    if rgModel.ItemIndex = 0 then id := 2 else id := 4;
    //初始化玩家
    cbbLoser.Items.Clear;
    for i := 0 to id-1 do
    begin
    GetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));
    cbbLoser.Items.Add(IntToStr(dwQQNum));
    end;
    end;

    procedure TfrmMain.cbbLoserKeyDown(Sender: TObject; var Key: Word; Shift:
    TShiftState);
    begin
    if Key = $2E then Key := 0;
    end;

    procedure TfrmMain.cbbLoserKeyPress(Sender: TObject; var Key: Char);
    begin
    Key :
    = #0;
    end;

    procedure TfrmMain.cbbWinnerDropDown(Sender: TObject);
    var
    i, id : Byte;
    dwQQNum: Cardinal;
    begin
    if rgModel.ItemIndex = 0 then id := 2 else id := 4;
    Prepare(handle, id);
    if rgModel.ItemIndex = 0 then
    begin
    //如果有一方为空,则提示双方均须进入游戏
    if (hChess[0] = 0) or (hChess[1] = 0) then
    begin
    MessageBox(
    0, '双方均须进入游戏后再开始!', '提示', MB_OK);
    Exit;
    end;
    end else
    begin
    //如果有一方为空,则提示双方均须进入游戏
    if (hChess[0] = 0) or (hChess[1] = 0) or (hChess[2] = 0) or (hChess[3] = 0) then
    begin
    MessageBox(
    0, '两组双方均须进入游戏后再开始!', '提示', MB_OK);
    Exit;
    end;
    end;

    //初始化玩家
    cbbWinner.Items.Clear;
    for i := 0 to id-1 do
    begin
    GetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));
    cbbWinner.Items.Add(IntToStr(dwQQNum));
    end;
    end;

    procedure TfrmMain.cbbWinnerKeyDown(Sender: TObject; var Key: Word; Shift:
    TShiftState);
    begin
    if Key = $2E then Key := 0;
    end;

    procedure TfrmMain.cbbWinnerKeyPress(Sender: TObject; var Key: Char);
    begin
    Key :
    = #0;
    end;

    procedure TfrmMain.cbHideClick(Sender: TObject);
    var
    i, id : Byte;
    begin
    if rgModel.ItemIndex = 0 then id := 2 else id:= 4;

    if rgModel.ItemIndex = 0 then
    begin
    //如果有一方为空,则提示双方均须进入游戏
    if (hChess[0] = 0) or (hChess[1] = 0) then
    begin
    MessageBox(
    0, '双方均须进入游戏后再开始!', '提示', MB_OK);
    Exit;
    end;
    end else
    begin
    //如果有一方为空,则提示双方均须进入游戏
    if (hChess[0] = 0) or (hChess[1] = 0) or (hChess[2] = 0) or (hChess[3] = 0) then
    begin
    MessageBox(
    0, '两组双方均须进入游戏后再开始!', '提示', MB_OK);
    Exit;
    end;
    end;
    if cbHide.Checked then
    begin
    for i := 0 to id-1 do
    begin
    //SendMessage(hChess[i], WM_SYSCOMMAND, SC_MINIMIZE, 0);
    ShowWindow(hChess[i], SW_HIDE);
    end;
    end else
    begin
    for i := 0 to id-1 do
    begin
    //SendMessage(hChess[i], WM_SYSCOMMAND, SC_RESTORE, 0);
    ShowWindow(hChess[i], SW_SHOW);
    end;
    end;

    end;

    procedure TfrmMain.cbSmartClick(Sender: TObject);
    begin
    edtDir.Enabled :
    = cbSmart.Checked;
    sbSetDir.Enabled :
    = cbSmart.Checked;
    end;

    procedure TfrmMain.rgModelClick(Sender: TObject);
    begin
    if not bVerfyed then rgModel.ItemIndex := 0;
    if rgModel.ItemIndex = 0 then cbbLoser.Enabled := False else cbbLoser.Enabled := true;
    end;

    procedure TfrmMain.sbSetDirClick(Sender: TObject);
    begin
    if odSetDir.Execute then
    begin
    edtDir.Enabled :
    = True;
    edtDir.Text :
    = odSetDir.FileName;
    sFileName :
    = odSetDir.FileName;
    // edtDir.Text := ExtractFilePath(odSetDir.FileName);
    edtDir.Enabled :
    = False;
    end;
    end;

    end.

    //自定义过程文件

    unit uCustomProc;
    
    interface
    
    uses Windows, Messages, SysUtils;
    
    procedure GetHWND(thewnd: HWND);
    function ExistsInst: Boolean;
    procedure Prepare(thewnd: HWND; id: Byte);//初始化游戏窗口句柄
    procedure Start(h:HWND);
    procedure AutoClick(hGameWin: HWND; bFlag: Boolean);
    procedure AutoPlay(id: Byte);
    procedure PlayLastStep(h1,h2:HWND);
    procedure EnsureHwnd(Winner, Loser : Int64);
    procedure ClickStep(hGamewin: HWND);     //点跳过,胜方不得分
    function GetNumber(hGameWin: HWND; const lpBase: Pointer; pBuf: PDWORD; bSize: Cardinal): Boolean;
    function GetSpecificWnd(theWnd: HWND; sTip: string): HWND;
    //function GetChildWnd(theWnd: HWND; sTip: string): HWND;
    procedure SmartPlay(h1,h2: HWND; id: Byte);//根据复盘数据智能化下棋
    procedure CustomPlay(h1,h2:HWND; id: Byte);
    procedure CustomClick(hGameWin: HWND; pt1,pt2: TPoint);
    procedure ReadChessFile(sFileName: string);
    function ConvertXY(hX, hY: Integer; t: Byte): TPoint;
    function ToXYPos(pt: TPoint): TPoint;
    procedure InputChess(h: HWND; parr: Pointer);//导入复盘数据
    procedure SetXY(x, y: PByte; t: Byte);//布局易位时修改坐标
    
    var
      hChess, hTmp: array of HWND; //两个人的游戏窗口句柄
      ChessFlag, fSpeed, fPause, fInst: Boolean;
      countOrders, fCount, Steps, fid, cTimes1, cTimes2, cHwnd:Integer;
      bufPos: array of array of Byte;
      bufChess1, bufChess2: array[1..30] of Byte;
      pt3,pt4:TPoint;
      sFileName: string;
    
    const
      BaseAddrQQ = Pointer($004C7BE0);    //qq号地址
      BaseAddrTimer = Pointer($00494D40); //计时器地址
      BaseAddrSetNum = Pointer($004C7BEC);//座位号地址
    
    implementation
    
    function ExistsInst: Boolean;
    var
      h: HWND;
    begin
      Result := False;
      h := FindWindow('TfrmMain', 'QQ四国军旗刷分器');
      if h <> 0  then Result := True;
    end;
    
    procedure GetHWND(thewnd: HWND);
    var
      i: Byte;
      h: HWND;
      buf: array[Byte] of Char;
    begin
      i := 0;
      h := GetWindow(thewnd, GW_HWNDFIRST);
      while h <> 0 do
      begin
        GetWindowText(h, buf, Length(buf));
        if buf = '四国军棋角色版' then
        begin
          SetLength(hTmp, i + 1);
          hTmp[i] := h;
          Inc(i);
        end;
        h := GetWindow(h, GW_HWNDNEXT);
      end;
     cHwnd := i;
    end;
    
    procedure Prepare(thewnd: HWND; id: Byte);
    var
      founded: Boolean;
      i, j, k, sum: Byte;
      h: HWND;
      buf: array[Byte] of Char;
      arrTmp: array of HWND;
    begin
      SetLength(hChess, id);
      //取得 已开游戏句柄  hTmp[cHwnd]
      i := 0;
      h := GetWindow(thewnd, GW_HWNDFIRST);
      while h <> 0 do
      begin
        GetWindowText(h, buf, Length(buf));
        if buf = '四国军棋角色版' then
        begin
          SetLength(arrTmp, i + 1);
          arrTmp[i] := h;
          Inc(i);
        end;
        h := GetWindow(h, GW_HWNDNEXT);
      end;
      sum := i;
    
      if (cHwnd + id) <> sum then
      begin
        if not fInst then
        begin
          MessageBox(0, '请先运行游戏!', '出错提示', 0);
          Exit;
        end else
        begin
          MessageBox(0, '请先运行刷分器再运行游戏,并确保所开游戏客户端个数符合刷分要求!', '出错提示', 0);
          Exit;
        end;
      end;
      //找出新开的游戏窗口句柄
      k := 0;
      founded := false;
      if fInst = False then
      begin
        for i := 0 to id - 1  do  hChess[i] := arrTmp[i];
      end else
      begin
        for i := 0 to  sum - 1 do
        begin
          for j := 0 to cHwnd - 1 do
          begin
            if arrTmp[i] = hTmp[j] then
            begin
              founded := True;
              Break;
            end;
          end;
          if not founded then
          begin
            hChess[k] := arrTmp[i];
            Inc(k);
            founded := False;
          end;
        end;
      end;
    end;
    
    procedure EnsureHwnd(Winner, Loser : Int64);
    var
      i: integer;
      h: HWND;
      dwQQNum, dwTimer0,dwTimer1: Cardinal;
    begin
      if Length(hChess) = 4 then
      begin
        //如果是4个窗口,将相同号码的两个放在hChess[1]\hChess[2]
        for i := 0 to 3 do
        begin
          GetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));
          if Winner = dwQQNum then
          begin
            h := hChess[0];
            hChess[0] := hChess[i];
            hChess[i] := h;
          end else
          if Loser = dwQQNum then
          begin
            h := hChess[3];
            hChess[3] := hChess[i];
            hChess[i] := h;
          end;
        end;
        //确定两两组合
        Start(hChess[0]);
        Sleep(100);
        Start(hChess[1]);
        Sleep(300);
        GetNumber(hChess[0], BaseAddrTimer, @dwTimer0, SizeOf(dwTimer0));
        GetNumber(hChess[1], BaseAddrTimer, @dwTimer1, SizeOf(dwTimer1));
        //如果没计时器信息,说明hChess[0]和hChess[1]不是同桌,需交换相同QQ号的句柄 ;
        if (dwTimer0 = 0) and (dwTimer1 = 0) then
        begin
          h := hChess[1];
          hChess[1] := hChess[2];
          hChess[2] := h;
        end;
      end else
      if Length(hChess)=2 then
      begin
        GetNumber(hChess[1], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));
        if Winner = dwQQNum then
        begin
          h := hChess[0];
          hChess[0] := hChess[1];
          hChess[1] := h;
        end;
      end else
      begin
        MessageBox(0, '打开游戏客户端数不符!', '出错提示', 0);
        Exit;
      end;
    end;
    
    procedure Start(h: HWND);
    begin
      //BringWindowToTop(h);
      EnableWindow(h, True);
      //摸拟鼠标点击 开始
      SendMessage(h, WM_LBUTTONDOWN, 1, MakeLParam(863, 607));
      SendMessage(h, WM_LBUTTONUP, 0, MakeLParam(863, 607));
    end;
    
    procedure AutoClick(hGamewin: HWND; bFlag: Boolean);
    begin
      if bFlag then
      begin
        PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 500));
        PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 500));
        Sleep(100);
        PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 460));
        PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 460));
      end else
      begin
        PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 460));
        PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 460));
        Sleep(100);
        PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 500));
        PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 500));
      end;
    end;
    
    {*********************************************************
    ** 功能:实现双方自动下棋
    **
    ** 传入参数:赢分的玩家QQ号
    **
    **
    ***********************************************************}
    procedure AutoPlay(id: Byte);
    var
      i: Byte;
      hGame: array[0..1] of HWND;
      dwTimer: Cardinal;
    begin
      //两组赋不同的句柄
      if id = 1 then
      begin
        hGame[0] := hChess[0];
        hGame[1] := hChess[1];
      end else
      if id = 2 then
      begin
        hGame[0] := hChess[2];
        hGame[1] := hChess[3];
      end;
        //提示不保存时   xPos:= 547; yPos:= 457;
      PostMessage(hGame[0], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));
      PostMessage(hGame[0], WM_LBUTTONUP, 0, MakeLParam(540, 460));
      PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));
      PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(540, 460));
      Start(hGame[0]);
      Start(hGame[1]);
      Sleep(500);
      //如果不是hGame[0]先下,则跳过
      GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
      if dwTimer = 0 then  ClickStep(hGame[1]);
      Sleep(500);
      //自动下棋
      i := 1;
      while i< 9 do
      begin
        AutoClick(hGame[0], True);
        while True do
        begin
          Sleep(200);
          dwTimer := 0;
          GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
          if dwTimer > 0 then Break;
        end;
    
        AutoClick(hGame[1], True);
        while True do
        begin
          Sleep(200);
          dwTimer := 0;
          GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
          if dwTimer > 0 then Break;
        end;
    
        AutoClick(hGame[0], False);
        while True do
        begin
          Sleep(200);
          dwTimer := 0;
          GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
          if dwTimer > 0 then Break;
        end;
    
        AutoClick(hGame[1], False);
        while True do
        begin
          Sleep(200);
          dwTimer := 0;
          GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
          if dwTimer > 0 then Break;
        end;
    
        Inc(i);
      end;
      
      //最后一步
      PlayLastStep(hGame[0], hGame[1]);
    
    end;
    
    procedure PlayLastStep(h1,h2:HWND);
    var
      //i : Byte;
      dwTimer: Cardinal;
      h, hBtn: HWND;
      hGame: array[0..1] of HWND;
    begin
      hGame[0]:= h1;
      hGame[1]:= h2;
      //最后一步
      //i := 1;   //hGame[0]赢分时
      Sleep(200);
      clickstep(hGame[0]);
      Sleep(500);
      dwTimer := 0;
      while True do
      begin
        Sleep(1000);
        GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
        if dwTimer > 0 then Break;
      end;
      //hGame[1]点击投降
      PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(856, 659));
      PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(856, 659));
    
      Sleep(300);
      //投降确认
      h := GetspecificWnd(hGame[0], '要投降吗');   //文本提示的窗口句柄
      hBtn := FindWindowEx(h, 0, 'Button', nil);  //右上角关闭按钮
      hBtn := FindWindowEx(h, hBtn, 'Button', nil); //确定按钮
      PostMessage(hBtn, BM_CLICK, 0, 0);
      Sleep(600);
      //全军覆没确认
      h := GetspecificWnd(hGame[0], '投降,全军覆没');
      if h = 0 then h := GetspecificWnd(hGame[0], '投降,全军覆没');
      hBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮
      hBtn := FindWindowEx(h, hBtn, 'Button', nil);
      PostMessage(hBtn, BM_CLICK, 0, 0);
      Sleep(500);
      //提示不保存时   xPos:= 547; yPos:= 457;
      h := GetspecificWnd(hGame[0], '是否需要保存');
      if h <> 0 then
      begin
        hBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮
        hBtn := FindWindowEx(h, hBtn, 'Button', nil);
        PostMessage(hBtn, BM_CLICK, 0, 0);
      end;
      
      h := GetspecificWnd(hGame[1], '是否需要保存');
      if h <> 0 then
      begin
        hBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮
        hBtn := FindWindowEx(h, hBtn, 'Button', nil);
        PostMessage(hBtn, BM_CLICK, 0, 0);
      end;
    
      Sleep(100);
      PostMessage(hGame[0], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));
      PostMessage(hGame[0], WM_LBUTTONUP, 0, MakeLParam(540, 460));
      Sleep(100);
      PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));
      PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(540, 460));
      //Sleep(800);
    end;
    
    {据复盘数据下棋}
    procedure SmartPlay(h1,h2: HWND; id: Byte);
    var
      dwSitNum: Cardinal;
      hGame: array[0..1] of HWND;
    begin
      hGame[0] := h1;
      hGame[1] := h2;
      //分析复盘数据 文件名如T-1-3,意思为第1位先下,第3位赢
      ReadChessFile(sFileName);
      //读入布局数据
      GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum, SizeOf(dwSitNum));
      //右,下,左,上的座位分别对应0,1,2,3
      if dwSitNum in [0, 3] then
      begin
        InputChess(hGame[0], @bufChess1);
      end else  InputChess(hGame[0], @bufChess2);
    
      GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum, SizeOf(dwSitNum));
      //右,下,左,上的座位分别对应0,1,2,3
      if dwSitNum in [0, 3] then
      begin
        InputChess(hGame[1], @bufChess1);
      end else  InputChess(hGame[1], @bufChess2);
    
      Sleep(100);
      //开始
      start(hGame[0]);
      Start(hGame[1]);
      Sleep(500);
      CustomPlay(hGame[0],hGame[1], id);
    end;
    
    procedure CustomPlay(h1,h2:HWND; id: Byte);
    var
      i, j : Integer;
      pt1, pt2: TPoint;
      dwTimer, dwSitNum1, dwSitNum2: Cardinal;
      hGame: array[0..1] of HWND;
      hTmp : HWND;
      PosXY : array of array of array of Byte;
    begin
      Randomize;
      hGame[0]:= h1;
      hGame[1]:= h2;
      //查座位方位
      //右,下,左,上的座位分别对应0,1,2,3
      GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum1, SizeOf(dwSitNum1));
      GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum2, SizeOf(dwSitNum2));
      //如果是hGame[1]先下,则交换两个句柄
      if dwSitNum1 in [1,2] then
      begin
        hTmp := hGame[0];
        hGame[0] := hGame[1];
        hGame[1] := hTmp;
        GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum1, SizeOf(dwSitNum1));
        GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum2, SizeOf(dwSitNum2));
      end;
    
      SetLength(PosXY, 2, countOrders, 6);
      for i := 0 to countOrders - 1 do
      begin
        for j := 0 to 5 do
        begin
          PosXY[0][i,j] := bufPos[i,j];
          PosXY[1][i,j] := bufPos[i,j];
        end;
      end;
    
      //确保是偶数步,便于最后的判断
      if Odd(countOrders) then Dec(countOrders);
      //如果加速,则定为30步
      if fSpeed then Steps := 30 else Steps := countOrders;
    
      //布局易位时,需转换起止坐标
      if (dwSitNum1 in [1,3]) and (fid = 0) or (dwSitNum1 in [0,2]) and (fid = 1) then
      begin
        for i := 0 to Steps - 1 do
        begin
          SetXY(@PosXY[id][i,2], @PosXY[id][i,3], fid);
          SetXY(@PosXY[id][i,4], @PosXY[id][i,5], fid);
        end;
      end;
      //开始循环
      for i := 0 to Steps - 1 do
      begin
        if Odd(i) then  j := 1 else j := 0;
        if bufPos[i,1]=$5F then
        begin
          //摸拟点起终两点
          if j = 0 then
          begin
            pt1 := ConvertXY(PosXY[id][i,2], PosXY[id][i,3], dwSitNum1);
            pt2 := ConvertXY(PosXY[id][i,4], PosXY[id][i,5], dwSitNum1);
          end else
          begin
            pt1 := ConvertXY(PosXY[id][i,2], PosXY[id][i,3], dwSitNum2);
            pt2 := ConvertXY(PosXY[id][i,4], PosXY[id][i,5], dwSitNum2);
          end;
          //转为像素坐标
          pt1 := ToXYPos(pt1);
          pt2 := ToXYPos(pt2);
          Sleep(1000+Random(4000));
          CustomClick(hGame[j], pt1, pt2);
        end else
        begin
        //点跳过
          Sleep(1000);
          clickstep(hGame[j]);
        end;
    
        //据计时器判断是否要继续的“死循环”
        while True do
        begin
          Sleep(100);
          dwTimer := 0;
          GetNumber(hGame[1-j], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));
          if dwTimer > 0 then Break;
        end;
      end;
      //最后一步
      PlayLastStep(h1,h2);
    end;
    
    procedure CustomClick(hGameWin: HWND; pt1,pt2: TPoint);
    begin
      PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(pt1.X, pt1.Y));
      PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(pt1.X, pt1.Y));
      PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(pt2.X, pt2.Y));
      PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(pt2.X, pt2.Y));
    end;
    
    {--------------读文件
    //根据复盘文件读入相关数据
    //文件前28H字节为文件头;接下来4个玩家信息(从开始下的一方始顺时针存储),每个58H
    //字节(前14H为用户名,接下来1E字节为布局)
    //再下来是执行指令,每10字节为一组(其中第3字节为起始行列,第4字节为目的行列——
    //以先保存的玩家方位开始计算,10H*10H数组)
    //棋盘布局文件数据 Char[30]
    //执行指令 5F 开始的10字节,控制(程序)指令F5开始    在19Ch(412)字节后开始 结
    //尾1Ch(28)字节是系统或保留的
    --------------------------}
    procedure ReadChessFile(sFileName: string);
    var
      f: file;
      buf1,buf2,buf3,buf4: array[1..30] of Byte;
      bufOrder: array of array of Byte;
      i, fsize: integer;
    begin
      try
        AssignFile(f, sFileName);
        Reset(f,1);
        fsize := FileSize(f);
        fsize := fsize - 412 - 28;
        countOrders := fsize div 10;
        if countOrders < 31 then
        begin
          MessageBox(0, '步数小于指定步数,请重试!', '提示', Mb_Ok);
          Exit;
        end;
        //读棋盘布局
        Seek(f,40+20+88*0);
        BlockRead(f, buf1, 30);
        if buf1[1] <> 0 then
        begin
          fid := 0;  //0-2位对战  左右位
          for i := 1 to 30 do bufchess1[i] := buf1[i];
          //读对方布阵 即左位
          Seek(f,40+20+88*2);
          BlockRead(f, buf3, 30);
          if buf3[1] <> 0 then
          begin
            for i := 1 to 30 do bufchess2[i] := buf3[i];
          end else
          begin
            MessageBox(0, '复盘数据有误!', '提示', mb_ok);
            exit;
          end;
        end else
        begin
          Seek(f,40+20+88*1);
          BlockRead(f, buf2, 30);
          if buf2[1] <> 0 then
          begin
            fid := 1; //1-3位对战  上下位
            for i := 1 to 30 do bufchess2[i] := buf2[i];
            //读对方布阵,即上位
            Seek(f,40+20+88*3);
            BlockRead(f, buf4, 30);
            if buf4[1] <> 0 then
            begin
              for i := 1 to 30 do bufchess1[i] := buf4[i];
            end else
            begin
              MessageBox(0, '复盘数据有误!', '提示', mb_ok);
              exit;
            end;
          end;
        end;
    
    
        //读指令
        SetLength(bufOrder, countOrders, 10);
        Seek(f, 412);
        for i := 0 to countOrders-1 do
        begin
          BlockRead(f, bufOrder[i, 0], 10);
        end;
    
        //从指令序数组中读出需要的,指令头,起始和目的行列
        SetLength(bufPos, countOrders, 6);
        for i := 0 to countOrders-1 do
        begin
          bufPos[i, 0] := i + 1;          //步数
          bufPos[i, 1] := bufOrder[i, 0]; //系统
          bufPos[i, 2] := bufOrder[i, 2]; //起始X
          bufPos[i, 3] := bufOrder[i, 3]; //起始y
          bufPos[i, 4] := bufOrder[i, 4]; //终点x
          bufPos[i, 5] := bufOrder[i, 5]; //终点y
        end;
      finally
        CloseFile(f);
      end;
    end;
    
    procedure InputChess(h: HWND; parr: Pointer);
    var
      pid, dwRead: Cardinal;
      hProcess: THandle;
    begin
      GetWindowThreadProcessId(h, @pid);
      hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
      WriteProcessMemory(hProcess, Pointer(Integer(BaseAddrSetNum)+4), parr, 30, dwRead);
      CloseHandle(hProcess);
    end;
    
    function ConvertXY(hX, hY: Integer; t: Byte): TPoint;
    begin
      //保存的复盘,棋子定位均是以紫方(上座-3位)为基准来定位的的
      //(从右往左0-16,从下往上0-16)
      //转到0位
      if t = 0 then
      begin
        Result.X := 16 - hY;
        Result.Y := hX;
      end else
      if t = 1 then
      begin
      //转到1位    //转到2位
        Result.X := hX;
        Result.Y := hY;
      end else
      if t = 2 then
      begin
        //转到2位
        Result.X := hY;
        Result.Y := 16 - hX;
      end else
      begin
      //转到3位
        Result.X := 16 - hX;
        Result.Y := 16 - hY;
      end;
    
    
     { // id 为坐位标识,留着待用
      //下面仅考虑任何两人复盘 转到2-4位(即上下位)下棋时的情况
      if fid = 0 then
      begin
        if id=0 then
        begin
          //1-3改坐2-4先后不易位时
          //1转到2 ;1转到4
          Result.X := 16 - hY;
          Result.Y := hX;
        end else
        begin
          Result.X := hY;
          Result.Y := 16 - hX;
        end;
      end else
      begin
        if id=0 then
        begin
          Result.X := 16 - hx;
          Result.Y := 16 - hY;
        end else
        begin
          Result.X := hX;
          Result.y := hY;
        end;
      end;  }
    end;
    
    function ToXYPos(pt: TPoint): TPoint;
    begin
      Result.X := 200 + 39*pt.x;
      Result.Y := 70 + 39*pt.y;
    end;
    
    {点跳过,胜方不得分}
    procedure ClickStep(hGamewin: HWND);
    begin
      PostMessage(hGamewin, WM_LBUTTONDOWN, 1, MakeLParam(850, 585));
      PostMessage(hGamewin, WM_LBUTTONUP, 0, MakeLParam(850, 585));
    end;
    
    function GetNumber(hGameWin: HWND; const lpBase: Pointer; pBuf: PDWORD; bSize: Cardinal): Boolean;
    var
      pid, dwRead: Cardinal;
      hProcess: THandle;
    begin
      GetWindowThreadProcessId(hGameWin, @pid);
      hProcess := OpenProcess(PROCESS_VM_READ, False, pid);
      ReadProcessMemory(hProcess, lpBase, pBuf, bSize, dwRead);
      CloseHandle(hProcess);
      Result := (pBuf^ <> 0);
    end;
    
    function GetSpecificWnd(theWnd: HWND; sTip: string): HWND;
    var
      h, hChild: HWND;
      buf: array[Byte] of Char;
    begin
      Result := 0;
      h := GetWindow(theWnd, GW_HWNDFIRST);
      while h <> 0 do
      begin
        hChild := FindWindowEx(h, 0, 'Static', nil);
        GetWindowText(hChild, buf, Length(buf));
        if Pos(sTip, buf) > 0 then
        begin
          Result := h;
          Exit;
        end;
        h := GetWindow(h, GW_HWNDNEXT);
      end;
    end;
    
    procedure SetXY(x, y: PByte; t: Byte);
    var
      i : integer;
    begin
      if t = 0 then
      begin
        i := x^;
        x^ := y^;
        y^ := 16 - i;
      end else
      begin
        i := x^;
        x^ := 16 - y^;
        y^ := i;
      end;
    end;
    {function GetChildWnd(theWnd: HWND; sTip: string): HWND;
    var
      h, hChild: HWND;
      buf: array[Byte] of Char;
    begin
      Result := 0;
      h := GetWindow(theWnd, GW_CHILD);
      while h <> 0 do
      begin
        hChild := FindWindowEx(h, 0, 'Static', nil);
        GetWindowText(hChild, buf, Length(buf));
        if Pos(sTip, buf) > 0 then
        begin
          Result := h;
          Exit;
        end;
        h := GetWindow(h, GW_HWNDNEXT);
      end;
    end;}
    
    end.
    
     

    //注册单元文件(只是为了功能完善,所以没用算法)

    unit uRegister;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Buttons, Registry;

    type
    TfrmRegister
    = class(TForm)
    bbtnOK: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    edtUser: TEdit;
    edtPsw: TEdit;
    procedure bbtnOKClick(Sender: TObject);
    procedure edtPswKeyPress(Sender: TObject; var Key: Char);
    procedure edtUserKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    function Encrypt(const s: string): string;

    var
    frmRegister: TfrmRegister;

    implementation

    {$R *.dfm}

    procedure TfrmRegister.bbtnOKClick(Sender: TObject);
    var
    reg: TRegistry;

    begin
    //如果不符合验证条件则退出
    if (Length(Trim(edtUser.Text)) <> 8) or (Length(Trim(edtPsw.Text)) <> 16) then
    begin
    ModalResult :
    = mrCancel;
    end;

    reg :
    = TRegistry.Create;
    try
    reg.RootKey :
    = HKEY_CURRENT_USER;
    if Trim(edtPsw.Text) = Encrypt(Trim(edtUser.Text)) then
    begin
    if reg.OpenKey('\Software\ShiGuoSF', True) then
    begin
    reg.WriteString(
    'user', Trim(edtUser.Text));
    reg.WriteString(
    'password', Trim(edtPsw.Text));
    ModalResult :
    = mrOk;
    end;
    end;
    finally
    reg.CloseKey;
    reg.Free;
    end;
    end;

    procedure TfrmRegister.edtPswKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #13 then bbtnOKClick(Self);
    end;

    procedure TfrmRegister.edtUserKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #13 then bbtnOKClick(Self);
    end;

    procedure TfrmRegister.FormShow(Sender: TObject);
    begin
    edtUser.SetFocus;
    end;

    function Encrypt(const s: string): string;
    var
    i : Integer;
    const ss = 'zjdygddg';
    begin
    for i := 1 to Length(s) do
    begin
    Result :
    = Result+ s[i] + ss[i];
    end;
    end;

    end.

    //帮助提示(用了一个默认窗口)

    unit uHelp;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ComCtrls;

    type
    TfrmHelp
    = class(TForm)
    reHelp: TRichEdit;
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    frmHelp: TfrmHelp;

    implementation

    {$R *.dfm}

    end.

    //主窗体文件

    object frmMain: TfrmMain
      Left = 433
      Top = 150
      BorderIcons = [biSystemMenu, biMinimize]
      BorderStyle = bsSingle
      Caption = 'QQ'#22235#22269#20891#26071#21047#20998#22120'1.1'
      ClientHeight = 319
      ClientWidth = 450
      Color = clMoneyGreen
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesktopCenter
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 3
        Top = 91
        Width = 124
        Height = 13
        Caption = #36873#25321#36194#20998#30340#29609#23478'QQ'#21495#65306
      end
      object sbSetDir: TSpeedButton
        Left = 323
        Top = 162
        Width = 23
        Height = 22
        Caption = #23548#20837
        Enabled = False
        Flat = True
        NumGlyphs = 2
        OnClick = sbSetDirClick
      end
      object Bevel1: TBevel
        Left = 1
        Top = 148
        Width = 348
        Height = 3
      end
      object Bevel2: TBevel
        Left = 1
        Top = 206
        Width = 347
        Height = 3
      end
      object Bevel3: TBevel
        Left = 3
        Top = 245
        Width = 343
        Height = 3
      end
      object Label2: TLabel
        Left = 4
        Top = 119
        Width = 124
        Height = 13
        Caption = #36873#25321#36755#20998#30340#29609#23478'QQ'#21495#65306
      end
      object Image1: TImage
        Left = 353
        Top = 40
        Width = 140
        Height = 211
        Picture.Data = {
          07544269746D6170A2660000424DA26600000000000032040000280000004600
          00005E010000010008000000000070620000120B0000120B0000FF000000FF00
          000000000000FFFFFF001C4B2F003A7C5600AAC6B6002C744C003C7455002358
          3C002A634500357B550034755200316D4D003B7E5A0041805E004C8768004B7E
          630046755C008AB39D003C6C5300538B6E0095B8A6002E765300448464003666
          4E00588E73005D92780064967D006B99830076A38D00AECABC00B2CABE00EAF2
          EE00E6EEEA00E2EAE600DEE6E2006D9F880080AA9600A5C3B5007CA69300739B
          8A0085AC9C0095BBAB008BAD9F0092B4A600586B63009BB3A900BED3CA00BACF
          C6008DB2A3009BBBAE00C6DAD20039735D00829D9300A7BDB500CBDBD5002D7C
          600092ACA300A3B4AE00478E7700A1BDB40093A6A000B5CBC400C2D4CE00DEEA
          E600DAE6E200D6E2DE00D2DEDA0095B5AB00ACC4BD0034856E005A776F00687E
          7800A5C3BB009AB6AE0023715D00B6C6C200C6D6D200BECECA006CA89B008BA2
          9D00B2C6C200BACECA006D8883001A675B00207A6B002B8B7C004296880074B4
          A90083BAB10084A29D00579F950072908C0093C5BF00BAD6D300ADC6C30098AA
          A8005D868200587B7800A1C7C400C0CAC9003AA59E009EB8B600BEDAD8009DAE
          AD00BECFCE005AAEAA0088A7A600B2C7C6001B898800A9CFCE0047BCBD006CF0
          F10078C2C2007799990023292900353D3D00A5BCBC00B9CFCF00B6CACA004D55
          5500B0C2C200BACACA00B6C6C600C6D6D600C2D2D200CEDBDB00DAE6E600D6E2
          E200D2DEDE00C7D2D200DAE2E200D6DEDE00D2DADA00E6EEEE00E2EAEA00DEE6
          E600EAEEEE00E6EAEA00DEE2E200DADEDE00D6DADA00D2D6D6005CC9D0008FA3
          A40014DAE9001B9FA8002CB0B9007F9FA200B8E6EA0091ACAE00A4B3B40019B7
          C9008ACDD400A1D2D70037CDE100B0D6DB00C9E4E80061D3E8007CD4E40098B0
          B40095D7E400ABBBBE00ACD8E300B1C2C600B6C6CA00BACACE00D6E6EA00AAB3
          B500B7C0C200B4BCBE00BADAE300D1DEE20082959C009FAFB500C1D2D800C6D2
          D600BECACE00CAD6DA00DAE6EA00CAD3D600BBC3C600C3CBCE008E949600E2E5
          E600C5DCE500A5B4BA00B0BDC20073858D007C8C930094A4AB00CAD9E000D0DF
          E600BECCD2006A7E88008B9BA300A2AAAE00CED6DA00999FA200DEE6EA00DAE2
          E600D6DEE200D2DADE00E6EEF200E2EAEE00EEF2F400C3D5DF00ABB6BC006175
          81009BA8B000B6C0C600516573005B6C7800C4CDD300BCC5CB003A5060004459
          68004B5F6E00D2DAE200CED6DE00CAD2DA00DAE2EA00D6DEE600DADEE200D6DA
          DE00D2D6DA00EAEEF200E6EAEE00E2E6EA00DEE2E600D2DAE600D6DEEA00CED2
          DA00DEE2EA00DADEE600D6DAE200D2D6DE00E2E6EE00D2D6E200DADEEA00D6DA
          E600F2F3F600C8CEE200CED2E100BAC1E400979ED800ACB2E100878CED00999E
          EA007074F1005A5CF500E6E6EE00E2E2EA00EEEEF200EAEAEE00E6E6EA000708
          3345150B12101852271C271C303B4965744324242427271A0E1202024A91916C
          0E131827285B5B9A6F9D9AA0C8F29E9A9D9DAFAEA2BEDAC9EBC9D9C8C8C9EBEB
          C4E7C4E7EA00170708330A0B12060F19191B2727262A2443432B282A2A24261A
          1B16080708919791450F0E1C11529F99A29A9AA0ABF19D9A9AA2AEA09EA2DAC9
          EBC9D9EAEAC9EBEBC4E7C4E7EA0012333333330612121013521B271A1923231B
          2B652B2B2B241C1B1A130A054A919791530806183B5226BA9D9D9AA2C8F29D9A
          9DCDAEA09EA2DAC9EBC9D9C8C8C9EBEBC4E7C4E7EA00084A3333330612061010
          13181813181B1B27243B494343241B18130E0515549197974A07080E281B1A95
          9A9D9ABEC8F299A0A0B1DB9B9BBEEBC9EBC9D9EAEAC9EBEBC4E7C4E7EA000708
          3333330A121206101010130E18271C2830302B2B2A1A19131816050537979791
          0907070D1A1C236A9A9AA0EAC8D9C0CDDAC4E7DBDAC9EBC9EBC9D9C8C8C9EBEB
          C4E7C4E7EA0007070B330A17121212060A100F0F191B26382A2A285923191813
          13050505156C91450C0507161A231C4E8E9DB8EAEAEDB3C4EBC4E7DBC4C9EBC9
          EBC9D9EAEAC9EBEBC4E7C4E7EA00170733333312061206121210100F1B601C4F
          2A5924261A181316050515050937450C090A0A16191C1B1A586DC8EAC8C9DBC4
          EBC4E7DBDAC9DAC9EBC9D9C8C8C9EBEBC4C4C4E7EA0007070B12121233333317
          120F100F522734382B28261B1813160505051515150909090C0C0D0D18231B19
          6A7AC8EAEAEBDBC4EBC4B3DBE7BEAABEDAEBC9EAEAC9EBEBE7C4C4E7EA000202
          080B173333331212101010135B2734592A591B1A0E16050505090909090D0C0D
          0D0C0C0D0E181A192343C8EAEAC9DBC4EBE7DBDBDBA2A0A2DAEBC9C8C8C9EBEB
          C4C4C4E7EA001707070817121717171212124647525B27344F59181916160505
          05050C0C0909090C0903090C0E1818191A26AFEAEAC9DBC4EBC4DBAEA2A09EA2
          DAEBC9EAEAC9DAEBE7C4C4E7EA000D067302081717171712122C464647525252
          5B341A0E0D090505051509091515051515090916161319181B2A2AEAEAC9DBC4
          EBE7DB9B9E9EA0CDDAEBC9C8C8C9DAEBC4C4C4E7EA0045101707071717177710
          2C2C2C4647474747525B270D0C150505150A150915150A05050A150D0D0E1918
          27301C44EAC9DBC4EBE7DBAEA09DA2C9EBEBC9EAEAC9DAEBE7C4C4E7EA001606
          0B0873081717102C2C2C2C4746474646471B1A0D030D0C0E130E160905050A0A
          05050B150D0E13131B262678C8C9E7C4EBCD9999A2A2CDC9EBEBC9C8C8C9DAEB
          C4C4C4E7EA000F0A0B17081717122C2C2C2C2C472C4746461A5B1B191B192323
          19181913090A1505050807080D160E1823232879C8D9DBEBDAA29E9EA2BEEBC9
          EBEBC9EAEAC9DAEBE7C4C4E7EA000D0B0B17171212100F2C2C2C2C2C462C4746
          1A461B1B272726241A181A19130F0B0B0702075564563A181C2A2A7CC8EADBDA
          C9AEA09E9BC9EBC9EBEBC9EAEAC9DAEBC4C4C4E7EA0012080B0B1712122C2C2C
          2C2C2C2C462C4652471B1A19271B26271A1A1A130E0F0A07020253979797561A
          1C3078EAC8D9DBDAEBDBAE9BCDC9EBC9EBEBC9EAEAC9DAEBE7C4C4C4EA000B08
          0A0B1712121010122C2C2C2C462C4647181A19181A27272719471A52130F0F08
          02026C979797561B262B4979BFA2999BDADAE7B3EBC9EBEBEBEBC9EAEAC9DAEB
          DAC4E0C4EA000537370B1217171077122C2C2C2C47474652195B1C1B27341C1C
          1C1B1A191852130F0853919797975626433044686D9E9D9EAAC4DBDBDAC9C9C9
          C9EBC9EAEAC9DAEBDAC4E0C4EA00536C450B0817171212172C2C2C2C2C474718
          4727341C1C2A241C2434275218180F0E12456C9797975A303B35C4EAB8A09D9D
          A2C4DBB3EBD9EBC9EBEBC9EAEAC9DAEBDAC4E0C4EA0054544A0B08171717122C
          2C2C2C2C2C475247522734342A382A2A26261C271A470F1010166C9197641B43
          353B6BC8D9AA9EA0CDC4DBDBDAD9C9C9EBC9C9EAEAC9DAEBDAC4E0C4EA005353
          530B17121717100F2C46462C464747525BBC1C59382B312B241C1B1B34270F10
          060F455464231C43313B447CC8D9AECDDAC4E7B3EBD9EBC9EBC9D9C8C8C9EBEB
          DAC4E0C4EA005353150B0B33121210612C2C462C46474752344F4F2A2D2B313B
          261C27271C272C1012100F161A2424434951B1C4C4D9E7C9C9C4E7DBEBD9C9C9
          EBC9D9EAC8C9EBC9EBC4E0C4EA0055540B0B0B3333104656602C474747475252
          344F5F2B492D493B312A2428241B0E10101046134E4E262B447CDDC8C8EAE7EB
          C9C4E7DBEBD9EBC9EBC9D9C8DDC9EBC9EBC4E0C4EA006C55373733333310C16E
          6460525247475B52343867393B3B313B48432A241C1A0E0E1318180F192326A1
          A36DA2B8DDEAE7C9C9DAE7DBEBEAC9C9EBC9D9EAC8C9EBC9EBDAE0C4EA009790
          6C55333333D29297975A52525B2C525B3438393BA1443B3B3B31302423130D0D
          131B1918121323BA6D9A9AA0DDEAC4D9C9DAE7DBEBEAC9C9EBC9D9C8DDC9EBEB
          C9EB84C4EA009790975545450F565A929A5A525BBC525B5B594339394435312B
          312B241C190D030D1327181346171A629E9090A0DDEAE7C9C9DAE7DBEBEAC9C9
          C9C9EAEAC8C9EBEBC9EBC9C4EA009791916C91556156565A694EBCB634343427
          4F38382A2B30282B142A261A16160D0C181B13191B5226F59A9090A2DDC8C4EA
          C9EBC4E7EBEAD9C9C9C9EAC8DDC9EBEBC9EBC9C4EA0091549797916C45615669
          69933434344F34342B381B261C231C28112A1C13160E13181B271A1A1A2449A2
          90909DB8E9EAE7C9C9EBC4E7EBEAC9D9C9C9EAEAC8C9EBC9C9EBC9C4EA004A54
          976C544545565A93714FB63C4F3C344FAD24271C231B1A1B231A131813131818
          1A27231C1C2465F3909AA0ABE9C8C4EAC9EBC4E7EBEAC9D9C9C9EAC8C8C9EBC9
          EBEBC9C4EA0007536C5307D755565A57714F344FBC3C1C3428432A241C1A1819
          0E160E0E0E1818131A1C1B262B2843AA9D9DBFC8E9EAC4C9C9DAC4E7EBEADFD9
          D9C9EAC8EAC9C9C9C9C9C9C4EA00076C6C54545555565A714FB64F3434341B1B
          1C2B43281C1B1313160C16160E1913131A271B1C2B2A49D9A2BFC9C8E9C8C4DA
          D9DACDDBC9EAC9EAC9C9EAC8C8C9EBC9EBEBC9E0EA004A6C6C5455976C56605B
          3434BC3434271A1B262B2B241A26190E0E0316160E1818131A231B262B2A43C8
          C8DDD9AABEBE9BAABE9B9E9BDAC8C9EAEAC9EAC8C8C9C9C9C9C9C9E0EA006C6C
          54545591975646472771594F2434271C2849432A261C180E18160C0D160E0E0E
          181B1A1C302843C8C8DD9C6F94AAA0A0AAA09EA0BEC8C9EAC9C9EAC8C8C9C9C9
          C9C9DFE0EA00976C545445556C164661696E59593C2A2626283830302A281B13
          0E160C030C0D0D060F1A191B1C2843EAC8C7DDB8E5AAA0A0A2A29E99DAC8C9EA
          C9C9EAEAEFC9EBEAD9C9DF84EA00546C4A55545533104760979A6A4F2A591B23
          302B2B494330241C0E0C0C030306120B101A19231C2328C8C8E99CAAAA9B9BAA
          BECD9BAEEBC8C9EAC9C9C8C8C8C9C9D9D9C9DF84EA0007535454373312104692
          90901C594F1B1B1C28243031432B11281A0E0F030A0A0B0B12181A2323231C78
          C8DDA29E9E99DAC8D9C9C4E7EBC8EAEAC9C9EAEADDEBC9EAEAD9DFC9EA000802
          53544A33100F465697972727342628282828433131494328261B18160A0A120B
          120F19231B1B1C43E99C9E9D9DA2DAC8EAEBC4E7EBC8EAEAEAC9C8C8DEC9C9EA
          D9D9DFC9EA0009080B6C0B10100F46565A69344F2A3828592428302A43292B2A
          261B1813060A0D06121013521A181C31DDAA9E9D9DA2DAC8EAC9C4C4EBC8EAEA
          EAC9EAC8DDC9C9EAEAEADFC9EA00151545370B100F0F613A5A6A5F382D2D2A28
          282A2A2A49313126241B18181616130D0610131B19181C35C09CA09DA0AAEBC8
          EAC9C4E7C9C8C8EAEAC9C8C8C8C9C9C8EAEADFC9EA0016030C0C0D060F463A60
          5A345F382D2D492B302B2A142B313028265B18461813181612100F195219283B
          B3BFB8A2AAABB5C4EAC9E0C4EBEAC8C8EAC9EAC8C8EAEBC8EAEADFC9EA000D0E
          0D0D0D030F0F3A5A60523467592B2D30492B492A2431282A261B19181B19180F
          100F4619191A2849DEDCDDABE6C8EBC8C8C9E0E7C9C8EAC8EAC9C8DEC8EAC9C8
          EAC883C9EA00160E0D160D0C0F333A6957594F6767382B492B30302B2A35282A
          281B0E191B180E0D0F0F0F1A1B1A2431E9C7C7DEC7DEC9C8EAC9E0E7C9C8EAC8
          EAC9EAC8C8EAC9EAC8EA83C9EA00160D03030D13186064976957593839672D3B
          432B2B2B493B2B1128261918190E0F0F0F0F0E1B1B232430B1E4C7DEC7DEEBEA
          C8C9EBE7C9C8EAC8EAC9C8E9C8EAC9C8EAC883C9EA00160C090C16181A5A9A9A
          6E694E2867393B65314331253B2A2A11281C130E0E03030C0E0E161A1C1C283B
          44DDC7DEDCDEC9C8C8C9EBC4C9C8EAC8EADFEAC8C8EAC9EAC8EA83C9EA00130C
          0D16130E165A9090909A6957599635963B493B44491C1C1C30261C19090A0D03
          0E130D1826262B3135C8C7DEE4DEEBABB8CDDAC4DFC8C8EAEAEAC8E9C8EAC9C8
          EAC8C8DFEA0018090C1809053755979090908E574335A1353B443D4425282331
          112424230C16130C0E1616181C26582343C9C8E9E4DEC9B89E9EAAC4C9C8C8C8
          C8EAC8C8C8EAC9C8EAC8C8DFEA00180A020609080755909090908E583B787878
          445E5050351126432B1C2826130E190E0E0D161923696E692B7CE4E9E4E9C9AA
          9D9D99B1D9DEC8EAC8EAC8E9DEEADFC8C8DEC8DFEA000C090808050C15549790
          909770583B743551503B48443B3B2550312A2A28231318160E160E1A5A9A906E
          57447BE9C7E9D9A29D9D9ECDDFDEC8C8C8EAC8DEDEEADFC8EAC8C8DFEA000D0C
          0A0B090C0C459797906457625E3B3B683D3B252531251E0429313143261B1C0E
          160C45195A8E9A6E285068E9E4E9C9AA9E9D98CDEADEC8EAC8EAC8E9C8EAEAC8
          C8C8DEDFEA00160A05080A030C3A9297923A2770584448442B35253B31445148
          3B443B1428241C1A134564645A58704E24501EB1E4E9C9B8A09EA0CDDFDEDEC8
          C8EAC8E9C8C8EADEC8C8DEDFEA000D05080705030E136492561061978E29443B
          4325442531442525253D432B2A591C19133A64645A11112324253B50E4E9EAAB
          B8A2CDDAC9E9C8C8C8EAC8E9C8EAC8E9DEDEDE83EA000305070708030D0E183A
          180F6C9A9A3011303B443B313B442544503E252A3824270F0F163A561A244328
          303549314DC7DFDEC8EAC9EBC9E9E9C8EAEAC8E9DEEAC8DEDEDEDE83EA000C07
          0202081516160D16131391976E1A191A2A3B2B2A313B251E3E684B312B241B12
          100F161B24242B303031314481C7EAE9DEEAC9E0DFE9DEDEC8C8C8E9DEEAC8E9
          E9E9DEC8EA00090702074A5555450C0D0F3A91975A2313131C2611243B503D3D
          813E51442D27270613100E27282A30302A3B3DC7E4C7EAE9DEEAC9EBDFE9E9DE
          C8EAC8E9DEEAC8E9E9E9DEC8EA00090702539197979109030E1691921B1A1818
          1C262824354850513E3D764B2D261C160F0F1A23262A2A2A2B253150E4C7EAE9
          DEC8C9EBDFE9DEDEC8C8DEE9DEEAC8E9E9E9DEC8EA0009070254909090910C0C
          063364561B1319231C1C1C232A3125504D2F3D3B28342319161A696E4E302630
          43482B2BE4C7EAE9DEEAC9EBDFE9E9DEEAC8DEE9DEEAC8E9E9C7DEC8EA000908
          5391979097560C0F0C10130E18181B24261B231A28293B1E2F503149341B1B1A
          0D5A90906E572A2B43252B2A68C7EAE9DEC8C9EBEAC7DEDEC8C8DEC7DEC8C8E9
          E9E982C8EA0009055397979097450C180F2C173345181C1C231A1C1C2B314844
          48312A27271913130D4E9A909A70302A433B2A2B7CC7C8C7DEEADFC9EAC7E9DE
          DEC8DEC7E9C8C8E9E9C7DEC8EA000315536C9197910D0D130F46176C643A1A18
          0E181B263B25041D3531381B1B13130E0E3A6E909A70302831252B7BE8C7EAC7
          E9C8DFEBEAC7E9DEDEC8DEC7E9DEC8E9E9E982C8EA00091537546C9145161616
          120F91919716133A3A5618262A1E504B443538341B1A180E13135A6E575C2A2A
          25503B76E4E4C8E9E9C8DFC9DFC7E9E9DEC8DEC7E9C8C8E9E9C7E9C8EA000909
          0D0C453A1616160E12619791910E0E5692921A231C48443B312D4F34191A1A13
          131A1B234E3B28294B7B6881E4C7DEE9E9C8DFC9DFC7E9E9DEC8DEC7E9DEC8E9
          C7E9C7C8EA0009160C0D160E0E0D13190F919797530D18929792231C2A5C582A
          2A24342734271913131B231C2344144BE4E3C6E4E8E4DEE9E9C8DFC9DFC7E9E9
          DEC8E9C7E9DEDEC7E9C7E9DEEA000D16160D0C0D0E130E131A97979717185A9A
          9792191C2598983B3934343434341B181B1C1B111CAA946DC7E8C6E4E8E4DEC7
          DEC8DFC9EAC7E9E9DEC8DEE9C7DEDEE9C7C7C7DEEA000E0C160E09150E180E18
          4E97929223195697975A1826506D6D4B1E5F342A34341C191C261C245A6F6F94
          A6E3C6E4E8E4DEC7DEDEDFC9EAC7C7C7DEDEDEE9C7DEDEE9C7C7C7DEEA001609
          160E0A050E0E0C1B5797975A1C1A3A926E4E282B512E4C68B4444F343C2A1B1B
          1C303B25706F906F9CC6C6E4C6E4DEC7E9DEEAC9EAC7E9E9C7DEDEC7C7DEE9E9
          C7E4C7DEEA000E030D0D09150D0D0D1A1C9269283019136469263B502F4C363E
          634B393C4F3C1B1C2A242911576F6FA09CE3C6E4C6E4DEC7E9DEEAC9EAC7C7E9
          C7E9DEE9C7DEE9C7C7E4C7DEEA000D0C0D0A0A030C03161818232624241A1923
          2328504444665D68634B35394F383424241C2A113062A0B8B2C6E3E4C6E4DEE9
          C7DEC8C9EAE4C7E9C7DEE9C7C7DEE9E4C7E4C7DEEA000D03100B0B0A0C0E1A18
          18131C262423231C2328443148989E9B684B3538382D2A261C26262829427CB1
          87C6E3E4E8E8DEE9C7DEEADFEAE4E4E9C7DEE9C7E9DEE9C7C7E4C7DEEA000E0A
          060808080A0F1A1913132326241C242A1C28293048989E9B7D814B2D382D4326
          1B232326303D3EC487C6E3E4C6E4C7E4C7DEC8DFC8E4C7E9C7DEE9C7C7DEE9C7
          E4E4C7DEEA0013060B080808080B101618191C1C4E1C262B262A2A3B25626D80
          807D63352D2A2D3026231B2A2A4B3EC887E3E3E4C6E4E9C7E9E9EADFC8E4E4C7
          C7DEE9E9C7DEE9C7E4E4C7C7EA000D060B070807020805375656236969281C24
          26142B1D4D3D51808042B34D2D2A492428261C3149444D84B7E3E3E8C6E4E9E9
          C7C7C8DFC8E4C7E4C7DEE9C7C7E9C7C7E4E4E4C7EA00090B0707070202025397
          90646497921C2326312B25793E2F688380807D4C35282B28241C303B393C68C4
          87E3E3E8C6E4C7E4C7E9C8DFC8E4E4E4C7E9C7C7C7E9E9E4E8E4E4C7EA00030A
          0202020202026C9090979797921B2B143B3B482F513D3E7D7DB14C2F3B282A30
          2627302D5F474DC484E3E3E8C6E4C7E9E4C7C8DFC8E4E4E4C7E9E9E4E9E9C7E4
          E4E4E4C7EA00090A0702020707076C9790649797641A2B3131253B2F8151817D
          36364D44312811302426242A3452A76883E3E3FBC6E4C7C7E4E9DEDFC8E4E4E4
          E4E9C7E4C7C7C7E4E4E4E4C7EA0009150A07020808539197915692973A133130
          29045E2F364D4CC436362E353124302A1B1A1C24523CA98183E3E3C6C6E4E4E9
          E4C7DEDFC8E4C7E4E4C7E9E4C7E9C7E4E4E8E4C7EA00090C0D030A0A0B549191
          0C569264192314303B3D3D502F4C847D4283682F3D2543142426261C523979B3
          E3E3E3FBE8E4E4E9E4C7DEDFDEE4E4E4E4E4C7E4C7C7E4E4E4E8E4C7EA00030C
          16090A090A4A540707559264262A3131313D512F7936B336837F4C3E681E4825
          492B2434274B2F81B7E3E3C6C6C6E4E9E4E4DEDFDEE4E4E4E4C7C7E4C7E9E4E4
          E4E8E4C7EA00160D160C15090D060802079197971C1129253B1E5151443E4C7B
          428280B14C4D253B31432A38383D4B36E3E3E3E3E3E8E4C7E4E4DEDFDEE4E4E4
          E4E4C7E4E4C7E4E4E4E4E4C7EA0013160D09090316030B02539797971B30302B
          25445C623D5D995D3E80423636683B31142B2B353B353D7DE3E3E3E3FBC6E4E4
          E4E4DEDFDEE4E4E4E4E4E4E8E4C7E4E8E4E4E4C7EA000F3A45450C0C160D0A07
          6C9797972324313148708E9E5C989E997C42807DB33E25492949313544441E36
          E3E3E3E3E8C6E4E4E4E4DEDFDEC6E4E4E4E4C7E4E4C7E4E4E4E8E4C7EA000E55
          5655090D0C0D09076C97909126283125629A908E8E9999664C364184364C3E2F
          3131253D4C4D1E84E3E3E3E3C6C6E4E4E4E4E9DFDEC6E4E8E4E4C7E8E4C7E4E8
          E4E8E4C7EA00606491550909090315085490906E6E573144989A9A9A5C62687D
          7B36807D364C682F1D25444D3E362F3EE3E3E3E3E3E3E4E4E4E4DEEADEC6E4C6
          E4E4C7E4E4E4E4E4E4E8E4E4EA004592916C150505091508539792929A8E3B3B
          9D9A9A8E4462626D364C367D4C4C4C2F50501E3D3E4C427F86E3E3E3E3E3E4E4
          E4E4E4EADEC6E4E8C6E4E4E8E4E4E4E8E4E8E4E4EA0033919791370B0A0A1507
          05456497977044299D9A9A9875989D99683E4D7D7D364C681D501D3E80E389E3
          E386E3E3E3E3E4E4E4E4C7EADEC6E4E8C6E4E4E4E4E4E4E4E4C6E4E4EA001692
          979153080A0909080D166E9A9A5C51318E9A9A486D989E994D3E4D68427D364C
          3D043B1EB32289E38686E3E3E3E3B7E4E4E4E4EADEC6E4FBC6E4E4E8E4E4E8E8
          E4C6E4E4EA00569797974A080B0A030E181897979A31683D98A098445E6D6D5D
          36363E36364CB14C4D483B1E7DCB8989E3E386E3E3E3E4E4E4E4C7DEDEC6E4E8
          C6E4E4C6E8E4C6E8E8C6E4E4EA003A9797921608080A0C0E1A1A9A9A70252F51
          48753D1D2F3E3D2FB14C367D4C4C36B151303B3B3E8389E38689E3E3E3E3C6E4
          E4E4C7DEDEC6E4FBC6E4E4E8C6E4E8C6E8C6E4E4EA003A64925613030705150D
          23196E9A5C484D2E3E362F2F3E4D3D442F2E4D4C7D363E3E4D1E143B7D3E42E3
          89E386E3E3E3E8E4E4B7E4DEDEE3E4E8C6E4E4E8C6E4C6E8E8C6E8E4EA001919
          45130E0C0505150C1B1C585C251E2F3E3E423D442E3E4D502E362F4C7D2E3D2F
          2E502950854C3689E38689E3E3E3E3E4E4C6E4DEDEE387E3C6E4E4E8C6E4E8C6
          C6C6E8E4EA0013160D0E130C051505091A23313D1E3D2F3E4C361D1E3E2E3E5D
          6D5D3D1D442F4D254444314487847DFE8986E2E3E3E3E3E4E4E8E4DEDEE3B7E3
          E3E4E4FBC6E4E3E8E8E8C6E4EA0019130D0E1309050509150E26253D3D3D3680
          4C414D25514C7B6D9E991E443B2F3D481D3D441E41863EFA898989E3E3E3E3E4
          E4C6E4DE82E3E8E3E3E4E4E8C6E4E8C6C6C6C6E4EA001A190C160E0915050505
          1623442E3E3E80417D417D2F3D5D9BA09E993D443B3E6804503D4D3E83417D89
          89FEE286E3E3E3E4E4E3E4DE82E3C6E3E387E4FBC6E4E3E8FBE8C6E4EA001319
          160C160C0905050905131E3D2F3641807D80803E2F629E9D98752F04313B2504
          442F513641418387FE89E286E3E3E3E4B7E3E4DEC7E3E8E3FBC6E4C6C6E8C6C6
          C6E3C6E4EA0018180E030D090505050505231D3D2E4C8041427D427D3666989D
          99511E1E3B3B2B3B1E3E3E7D7F2236428989FA86E3E3E3E4E4E3E4DEC7E3E3E3
          E3C6E4E3E8E8E3E3E8FBC6E4EA00180E16090C05080805050D1A3B1D2F3E4280
          41424266A2999B98753E1E44313D4C4D51687D7D7E837D368989E286E3E3E3E4
          E4E3E4DEE4E3E3E3E3C6E4E3E3C6FBC6C6E3C6E8EA00130E030A090707070505
          0E0D1C253D4C7D82828083999E9E9976251E367D1E418283364C4C427D808380
          E289E289E3E3E3E4E4E3E4DEE4E3E3E3E3C6E4E3E3E8E3E3FBE3E8C6EA001813
          0308080207546C543A132328043D3641877F4166A09E9951443E83427E7E4083
          7F7D4C7D414242368989E2E2E3E3E3E4B7E3E8DEE4E3E3E3E3E887E3E3E3E3E3
          E3E3C6C6EA0019180F07020253979797551A26243144367D7F4042325D9B6B7C
          4C4CE33641827FC7877D7D3680364C428989E2E2E3E3E3E4B7E3B7E9E4E3E3E3
          E3E3B7E3E3E3E3E3E3E3E8C6EA001A190E1707026C97979755161C31251D669B
          A2AA682F3D1E1E1E2F864282E3877D7F834C3E4C7D3636368989E2E2E3E3E3E4
          B7E3B7C7E4E3E3E3E3E3E4E3E3E3E3E3E3E3E8C6EA001B18130F075391919797
          551529253D3E669E9D9E9B2E3E363D143E7D80E286867E8342362E3E3E7D7F83
          E289E2E2E3E3E3E4E3E3E4E4E4E3E3E3E3E3C6E3E3E3E3E3C6E3FBC6EA001B13
          0F0E0B4A6C979797371C31252F32B8A09D9E9B7D42363B3D8041868588868783
          42832F3E3E3682868989E2E2E3E3E387E3E3B7E4E4E3E3E3E3FBC6E3E3E3E3E3
          E3E3E8E8EA001A13100F0F376C9197562324313B3D3E7D9BA0A0B8417D4425E3
          E1E18888E18886C88287C42E7D42E3E28989E2FA89E3E3B7E3E3FBE4E4E3E3E3
          E3E3C6E3E3E3E3E3E3E3C6C6EA00191306170B3337536C3A1B113131442E8080
          9C9C80424C1D3D4CE1E1E188E1E1E1E286868680828285E2E289E2E286E3E3E3
          B7E3E3E4E4E3E3E3E3FBE3E3E3E3E3E3E3E3E3C6EA001813120808080B050913
          1C2629251E3E7D824122838332363E1E42E1E1E1E1E1E1FD88FD88E1858988FD
          8989E2E286E3E3E3E3E3E3E4E4E3E3E3E3E3E3E3E3E3E3E3E3E3FBC6EA00160D
          0D0B0708080537561C2630253D4C4241414183422E4C322EE1E1E1E1E1E1E1E1
          E1FD88E1E18888E28589E2E286FEE3E3E3E3E3E4E4E3E3E3E3E3E3E3E3E3E3E3
          E3E3E3C6EA000C030D0C080705080518191B2431985D42427D4142423E4C7D80
          FCE1E1E1E1E1E1E1E1FD88E1E1FD88FDE288E2E289E3E3E3E3E3E3E4E4E3E3FA
          E3E3E3E386E3E3E3E3E3FBC6EA0009150D0D0508050502101A1A5A979A983636
          36827F41327D4282E1E1E1E1E1E1E1E1E1E188E1E188FD85E285E2E2FAE3E3E3
          E3E3E3E4E4E3E386E3E3E3E386E3E3E3E3E3E3C6EA0009090C03150505080802
          1819929090702E3636404082424242427DFCE1E1E1FCE1E1E1FDE1E1E1888888
          E288E2E2FA89E3E3E3E3E3E4FB86E3FA86E3E3E386E386E3E3E3E3C6EA000C09
          030C090A05080508153A979090702F7D428287414180414187E1E1E1FCE1FCE1
          E188E1E1E188FDE2E285E2E28989E3E3E386E3E4E486E3E386E3E3E3CBE386E3
          E3E3E3E3EA00160C0D03090905090515155490909230043E4222827F41428340
          FCFCFCE1E1E1E1E1E1E1E1FCE18888888588E2E2FA89E3E3E386E3E4FB86E3FA
          86E3E3FACBE386E3E3E3E3E3EA000D0D0D0D0C0D090C0309055497906424303E
          418241828241428287FCE1FCE1CCFCE1E1E1E1E1E188FDFDE2FD85E2E289E3E3
          E386E387FB89FEE386E3E3E3CBE386E3E3E3E3E3EA00090C0C0D0909030D0C15
          054A97921924242F364232427D7D3687FCCCFCE1E1E1CCE1E1E1E1FCE1E18888
          888888E2E2E2E3E3E389E3B7B7E2E3EC89E3E386E2FACBE3E3E3E3E3EA000909
          05150505150C0315050537451323303D324C3E32663242E2CCCCFCE1CCCCFCE1
          E1E1E1E1E18888FDFDFD88E2E2FA86E3E389E3B7E3FA89E389E3E3E3E2E3E2E3
          E3E3E3E3EA000A0915050A05150909090905150C163A291D99625D9BA0998086
          CCFCCCE1CCFCCCFCE1E1E1FCE1E18888888888E2E289FAE3E386E3B7E3E386FA
          86E3E386E2E3CBE3E3E3E3E3EA00090A05090A0505090E19191316134592585C
          9E7099999DA07F8288FCCCFCCCFCCCFCE1E1E1CCE188888888FD8888E2FA89E3
          E389E3E3E3FA86FA89E3E3E3E286FA86E3E3E3E3EA000A05050B0B0A03182323
          2324281C11572599989899999EA28087CCFCCCFCCCFCCCFCE1E1E1CCE1E18888
          85E3E3E2E28989FEE389E3E3E389E38989E3E386E2E3E286E3E3E3E3EA000305
          08080B0F191B1C231131142929585C5C5C6D66759B5D4242FCCCE1CCFCFCCCFC
          FCE1E1CCE1888888B7878786E2FA89E3E389E3E3E3FA89E2FAE3E389E2E2FA86
          E3E3E3E3EA000A0B08080B0E181B241114313B29708E8E5C312E4C3E42367D42
          228686CCFCCCCCFCFCE1FCCCFCE188FD878787E4E2E289E3E3FA89E3E389FA89
          FA86E3E2E2FAE286E3E3E3E3EA000A0A080A100F1A1C11241131315C8E9D9D70
          142E363E42424242418786FCCCCCCCCCFCE1FCCCFCE18888B787C687E2FA8986
          E389FAE3E3E289E2E286E3E2E2E2FA86E386E3E3EA000C0D0F1813461A27262A
          1431315C8E9D8E98142F363682427D7D3E7D86CCFCCCFCCCFCE1CCCCFCE18885
          87B787C6E2E2FA89E38989E3E3E289E2FA89E3E2E2E2E2E2E386E3E3EA000D19
          18180E46181B2A3814140462989D9E6D3B0436414142367D2E4C4C86CCCCCCCC
          FCE1FCCCFCE1888687C68786E289FA89E3E289E3E3E2E2FAE286E3E2E2E2FAE2
          E386E3E3EA000D191313131A1A34282A141D1D5D6D996D3D041D364141427D40
          2E2F3E42FCCCCCFCFCFCCCCCFCE1888687E3E4E2E2E28989E3E289E3E3E2E2E2
          E289E3E2E2E2E2E2E386E3E3EA00161A131A471C3427342814043E322E3D3D3E
          2F2F3E42424236412E3236FCCCCCCCCCCCFCFCFCCCE1FC8687E387E2E2E2E289
          E3E2E2E3E3E2E2E2E2FA86E2E2E2E2E2E386E3E3EA001A1A181A1A1B341C2624
          142E2E3E322F2E323E1E2F3E3E4232364C1E2FCCCCCCCCFCFCFCCCCCCCE1E186
          87B787E2E2E289FA86E2E2E3E3E2E2E2FA89E3E2E2E2E2E2E3E2E3E3EA001C1A
          1A0E131B11142A311E2E1E2E3E4C36362E253E3E2E323E42413641CCCCCCCCCC
          CCCCFCFCCCFC888787B78688E2E2898986E2E2FEE3E2E2E2E2E286E2E2E2E2E2
          E3E2E3E3EA0023261A130E23241114252E2F3D3E323636363D1D322E2F324142
          8588CCCCCCCCCCCCFCFCCCCCCCFCE287E3C68688FDE289FA89E2E2E3E3E2E2E2
          FA89E3E2E2E2E2E2E3E2E3E3EA00232619160E182630311D3D3D2F3642424236
          2E3D626D2E2E42364221CCCCCCCCCCCCCCCCCCCCCCFCE287E387E2E188E2E2E2
          89E2E2FEE3E2E2E2E2E286E2E2E2E2E2E3E2E3E3EA00232619160D0E1A111429
          62251D2E423236362F5C9E9E9B423E2E4221F0CCCCCCCCCCFCFCCCCCCCFC86E3
          87E3E2E188E2E2FA89E2E2E386E2E2E2E2E2FAE2E2E2E2E286E2E3E3EA001A1C
          1A16160E0E2358708E7029251D252F2E3D5C9D9DA04140868888CCF0CCF0CCCC
          CCCCCCCCCCE187B7E386E1E188E289E289E2E2FE89E2E2E2E2E289E2E2E2E2E2
          E3E2E3E3EA002324231A1A180E18578E908E57281114112F32999D9DA0AB4086
          F0CCCCCCCCCCCCCCFCFCCCCCCC88E3B7E3E3E1E188E289E289E2E2FA89E2E2E2
          E2FA89E2E2E2E2E286E2E3E3EA001C261B1A1A19561A566E906E231C24113004
          419B9E9DA09C822141F0CCF0CCF0CCCCCCCCCCCCCCE2E3E38789E1E188E289E2
          89E289FA89E2E2E2E2E289E2E2E2E2E2E3E2E3E3EA001C261B19195A6464563A
          5623191C11311D322E5DA09EA0AB7F2140F0CCCCCCF0F0CCFCFCCCCCCC86E3E3
          8788E1E188E289E289E2E2FA89E2E2E2E2FA89E2E2E2E2E286E286E3EA001C26
          1A13181A64643A161313191C11312F2F2E3EAAAA9C7E822285F0F0CCF0CCCCCC
          CCCCCCCCE186E3E386E1E1E188E2E2E289E2E28989E2E2E2E2E2E2E2E2E2E2E2
          FAE2E3E3EA001C261A0F1319563A0E0D130E1B3026312F2E3D2E4240416B4476
          7FF0F0CCF0F0CCCCFCFCCCCC88E3E38789E188E288E2E2E289E2E2E289E2E2E2
          E2E2E2E2E2E2E2E289E286E3EA001C1C1A10100E0E0E0D0E19131911141D3E36
          3E42822251A36B447DF0F0F0CCCCCCCCE1CCCCCCE286E3E389FD86E7DEE2E2E2
          89E2E28989E2E2E2E2E2E2E285E2E2E2FAE286E3EA00231C18060F0D0C0D160E
          13191C31251E2F2E3E42407FA15E76767CCCF0F0F0CCCCCCFCCCCCFC8686C686
          8280C4B5D5DFE2E2E2FDE289E2E2E2E2E2E2E2E285E2E2E289FA86E3EA001B1C
          130D0F0D090D16160E242B251E2F324242324C3274747876A5F0F0F0CCCCCCCC
          FCCCCC858686E3858283B3B3B4D1E4E2E2E2E289E2E2FDE2E2E2E2E285E2E2E2
          E2E286E3EA001B1B0E0D0E1655643A181C1431253D3E2F2F42322E2E7448446B
          A5CCF0F0CCCCCCCCFCCCCC85E28686E28283C8C8B3B0B0E4E2FDE289E2E2E2FD
          E2E2E2E285E2E2E2E2FA86E3EA001A1A160D0E5597906E4E11141D1E2E2E322E
          3242417648746B6B5188F0F0CCCCCCFCCCCCCC88E2E4888680C8C8C883C4B581
          E4E2E2E2E2FDE2E2E2E2E2E288E2E2E2E2E289E3EA0019190E0D0E5697909057
          2B3B1E1E1E042F2E3D3E42783B74766B5186F0F0F0CCCCCCFCCCCCCC8686FC84
          B3C8C8C88384B3C4C482E2E2E2E2E2FDE2E2E2E288E2E2E2E2E289E3EA001A19
          0E16133A64909A5714293D3D2F251D2F1E3D3674446B76744C3FE1F0CCCCCCCC
          CCCCCCCC8688E1C9807FC88383C9C4C4C4B382E2E2FDE2E2E2E2E2E288E2E2E2
          E2E289E3EA001818160E18185A6969581431253D043D1D2E2F2F7D4944765E49
          3E2188F0CCCCCCCCFCCCCCCC85CC887F83DE808083C9C980C4C4B3C8E2E2E2FD
          E2E2E2E288E2E2E2E2E2E2E3EA001918130E191A234E24111431142F14043E3D
          3E1E36433B5E7443418688CCF0CCCCCCCCCCCCE1FCCC888383C8808383C984C9
          C984C481E4FDE2E2E2E2E2E288E2E2E2E2E28986EA001818131313181C231A24
          3131312E251D1D1E2F3E2F49745E3B49872188F0CCCCF0CCFCCCCCE2E2CCFCE3
          838083C880C9C9C9C9C9C9B183E2E2FDE2E2E2E288E2E2E2E2E2FA86EA000F13
          13130E131A1923585C5C252E2E3D1E3D2F363D747848745E3F8620F0CCCCF0F0
          CCCCCCE286CCCCFC89B7B7E2B7C98483C9C9C9C482E2E2E2E2E2E2E288E2E2E2
          E2E2E286EA00100F0E0D0C0C1313648E9A70292536362E1E3E3225745048747C
          3F2188F0CCF0F0CCCCCCCCE2E2FCCCFCE3C782B7E2E3C9C9C9C9C9C9E3888888
          E2E2E2E288E2E2E2E2E2FA86EA00030F0E031603031A579A908E57112E413E2F
          32326548445E74364086CCF0CCF0F0CCCCCCCCFD85CCE28588FDE4C7B7E2B7C9
          84C9C47DE3E2FD88E2E2E2E288E2E2E2E2E2E286EA00060D0F0C190E1624588E
          9A9E57313642404236427478445E7840218686CCCCF0F0CCCCCCCC8588E1C8B3
          B5B5DFC78289E2B7C4C9C4B1B788FD88E2E2E2E288E2E2E2E2E2FA86EA00100D
          0E131A1318112957985C112532413F873F7D786B5E6B76211F88202088CCF0CC
          CCCCE18588887FC4B5B584DEEBDEE2FD82B3B3C4FA88FD88E2FDE2E288E2E2E2
          E2E2E286EA000F0D160E1A1A2614313B1D322E3E2E42223F3F686B767A767D1F
          CC8585858689CCCCCCCCFD85888882B0D48083C8E4C4DFE2E2E483B7E288FD88
          FDE2E2E288E2E2E2E2E2FA86EA000F0D0D1324261125041D042F363E2E424122
          3F787668A56B86F0CC8888E12121CCFCCCCC85E288E2C8B4D4848383C8E3E0DE
          E288FA89E288FD88E2E2FDE288FDE2E2E2E2E287EA000E0D132328141425042F
          2F2E41413236424122787951686BCCF0CCCC1F888640CCCCCCE1E285E1FC83D1
          B0C4C9808083E3DEC9E28889E2E188FDFDE2E2E288E2E2E2E2E2DE76EA000E13
          192311143131392F2F2E36363E3641874276A568A5B3F0F0F0CC1F208687FCCC
          CCE18588E1CCB7D1D5C4C9C9C9C983E2DFE4E2E2FDE2E2E2E2E2FAE2FDFDE2E2
          86C9A479EA000E0E191C241431312D39322E323636364286795168687621F0F0
          F0F0CC8622827ECCCCE18888E189B3B46381B38483C9C4DE89C789E4D4D1D1BA
          BABABABABABABAA1D0C2D0CEEA0013191A0E241425353947683E2E2E42323622
          4451C0687AE1F0F0F0F0CC85212287CCCCE1E1888587D4B0B5D4B5B3C9C984C4
          8389E2E2E2FAFD88E2E2FDE2FDE2E3C0A3C9FA89EA001919231311243504395B
          A14D4D4C422F42365E7668B0AFCCF0F0F0F0CC88868787E1E1E1E188E2E384E7
          81B5B0D5B5B1C9808483E2E2E2FDFD88FDE2E2E28887C079C8E2E289EA001C19
          18132414351EB63C4450442E361D2E3B5076687687F0F0CCCCF0CCE185224088
          E1E1E1888889E0B3D4B5A4BAB4D48483C9C987FDE288FD88E2E2FDE2E3A579E4
          E2E2FA89EA0011261323241114354F353D7449041D29312A6B51A5A31FF0F0E3
          82CCCC8885408285E1E1E188E1E4E7B3B3B0D1BAD1B0C484C9C983E2E288E188
          FDE2E2E3C0B0E4E2E2E2E289EA00242413232624282A34254B3B2A3131283043
          5E766BAF8988FCB3BAD4E32021414085FCE1888888C9B3C9DFB0BAD1D1D5D4D4
          84808389E288FD88E2E2E37CB087E2E2E2E2FA89EA0024240E1A191A26272631
          3B2B2A31042926495078744279A381B4ADC2B9E387368788E1E18888E1DFB3E4
          DFD4D5B4D1B5B58184C9C982E2E1FDFDE289C07CE3E2E2E2E2E2E289EA00231A
          181819191C1B2A43316A59313D43284944446BB7AF68A18FBDC2BC8122428285
          FCE18888CCDFE7DEE0D4B0D5B3C4C9C9B3C4DEC48988E18886AFD4E388E2E2E2
          E2E2FA89EA00231A1A191A23275930654328593B1D261C493B3B80827C79BA79
          7AC2BBBC4C7D4185E1E18588E1C9E7C484DFE7B3B381DEE3B7E4E0B3FDDE88E2
          C4AFE388E2E2E2E2E2E2E289EA001C23191A231C1A26283028237143281C2A2B
          493B2184687AC07C68785FC2AC3D4188E1E1E28888C9DE82DEC481C9E0D4D5B5
          E488E7DFE2B3FD80C486E2E2E2E2E2E2E289FA89EA0026261A1A232424231C24
          1C601A30242B2B43493E874C4D79B06868A57874BC59B58588E1E288FDE08382
          828283C9C9C9C4D5B589E386E3B37DC989E2FDE2E2E2E2E2E2E2E289EA001C24
          1C1B242826271C2493601C494343433149412265B979686868687A742B43A1B3
          88E185E189C4C4C484C9C88283C98482C9C9FDB7DED5C9E2E2E2E288E2E2E2E2
          E2E2FA89EA002411282330281C712328715B716A3B3B3B652E4121C27A79B0B0
          4DA57A74B97A76ADAF85888886C4C48484B3C4C88383C9C987E3E2E3C9B0FA88
          E2FDE288E2E2E2E2E2E2E289EA001D31111C243071272793715B716A44445E44
          42403696B0686879797976B07AB9A1A3ADD485E1FCE4E0C980C4C484C980C9C9
          E488FDE2E4C4FDFD88E2E288E2E2E2E2E2E2FA89EA002511292826281C714E71
          71605B9F4450A14240224C7AB0B06878767676B0B0B07A78A3ADB585CCDEDBE0
          84C4C484C484C8C6E2E288E2FEC8E188E2FDE288E2E2E2E2E2E2E289EA001424
          11142B28271C71715B605B49447451213F217C7A51B076BA76797979B06879A3
          BAA367AFE2C9B38484848484C4C9E3E188FD88E2E4DEFD88FDE2FDE2E2E2E2E2
          E2E2FA89EA00112824113B6A1A61525A606071659F6A42213F21794479797A50
          796868B076A47979A37A78AD82C9B3B3C4C484808384C9E388FD88E2DEC7E188
          E2E2E2FDE2E2E2E2E2E2E289EA00261C1C111D2A1860605B606071656A746820
          8588823EA1A1785050A36868B0B0797979A47A78B3EBB3B3B3B3C484C9C984C8
          E2FD88E2C4E4FD88E2FDE2E2E2E2E2E2E2E2FA89EA001C261125042660606060
          606071439576A1211F1F2021838481837D7DA37968B07979A4A4A478C4DFB3B3
          8181B3B3C4847DDEE288FDE2B3B7E188FDE2E288E2E2E2E2E2E2E289EA002811
          141425261A5B60606060936AA176448720882020B581C4B3422285B0797979A4
          79767A7A8AC9B3B381B581C484C4B17FE389FDE2B3E3FD88E2E2FDE2E2E2E2E2
          E2E2FA89EA0031241129311C525B6060607193437651783F20888587C4B5B5B5
          63DECC89B0A4797979A478B1E3C9B381D4B0B5C4C9C4C480C9C980E4B389FD88
          E2E2E2FDE2E2E2E2E2E2E289EA00312411312B1C1B5B60606093443B79765E21
          2282408D8285DE81D181E1E1E37AA47979BA787989C9D4B5D5B4B0B3B1B3C4C9
          8484C482DBE2FD88E2FDE2E2E2E2E2E2E2E2E2E2EA00142811293026521B603A
          609378747651782041765F71C267A1C484AFDEE18882A1A4A4A1A1A3E1DFD4D4
          B4BAB4B0B0B0D4AFD4AFC8E4E7888888E2E2E2E2E2E2E2E2E2E2E2E2EA00111B
          23142B1C1A1A61606171496A78796B2041763B8FBCBB8FB9BAB5E48988857D78
          A3A19676CCE4D4B5D5D1D1D1D1D5D5B581DFE4C9EB88FD88E2E2FDE2E2E2E2E2
          E2E2E2E2EA00113011253149275B60606171749595766B20426B5F59595F7478
          C4B4CEDEFD8886B5B974AD84CCB7B5B4BABAA9D1D1D1D1D1D5C4DED4E0E18888
          FDE2E2E2E2E2E2E2E2E2E2E2EA001425251D1D3B34276060619365436A6BA320
          427AAC5B8F35A1787AE4D4A7D4E288E3C9A5AFB7E1C9D5CEADADADB9A8BABABA
          D1B0B3B4E088FD88E2E2FDE2E2E2E2E2E2E2E2E2EA00250404041D5059346060
          6071656A93505E2168505952C2AD4479A4A489C8B9D58885E287C786FCDEB3BA
          D0D0BDD0C3BAD1D1D1D5D4CEEBE18888E2E2E2E2E2E2E2E2E2E2E2E2EA000425
          2525253D4F596060617149956A4444414274ACBBAC67B9A4A57979E2DEBAD4FE
          85E2B7E28887C8B3B3D5CED0C2BDCED1B4C4DFBADF8888E2E2E2FDE2E289E2E2
          E2E2E2E2EA001E042525042F4F595260609343955965437D223DACC1BC6778BA
          7AD579B0868AD1D5E285E4E28683B5D5D4C4C4D4BAD0BDC3CEE0FAB5DEE188FD
          E2E2E2E2E289E2E2E2E2E2E2EA002F1D043E32513C59526060936A6A71436540
          2122BCC1BCBDA1BABA78A4A47C8982D1C488E285E3C4D5BABA7AB0AFB3B0BAAD
          D0D4FADFE4FD88E2E2E2FDE2E289FAFAE2E2E2E2EA002E1E2E3E3E2F4F595B60
          6093285959493B4042A15B5BBC8FAD96A1A37A767A7C86DED48788C7D0C2C2C2
          C2BD8FBDBD8FC2ACACBCC2C2C2BDD0C3B9CECEB9B996ADADC3B9B9B4EA002E3E
          2E3E32504F595B6060717128593B7441356ACFBBBCC2BDD0B94B79A4A3A37C86
          E4B7E1DFC2C1C1D3D3D3D3D3D3D3D3CFCFC1CFC1BBBBBBBBC1C1C1BBC1BBC1BB
          C1BBBBACEA002E2E2E3636503C595B606026936A6A3B654D747160BCACC2ACC2
          D0B9A4797A78BAB586E388E286B3D5A8BAA1BACEA1A1CEBAD5B584DEFAFDFDE2
          FDFDE2E2E2FA89E2E2E2FA89EA001D2F3E36365038595B606093593059434976
          3B52C1BCBBBCACBCACC2ADBA797A7AD1768988E389E0D1BABABABAD1BAB9B9D1
          C4FBE3DF89E188E2E2E2E2E2FA89FA89E2E2E289EA001D1E364236443C285261
          61276A6A9343313649BBCFCFC1BCBCBBC1BBBDA1A47979797A80E27EE4B0B9CE
          BABABACED1B4B5C8E2FDE3E4E28888E2E2E2E2E2E286FA89E2E2FA89EA001D31
          324132353C6A5261615B26955949314265CFD2D3BBBCBBC1CFBBC2AD7AA47979
          797ACB82C7B3CEC3AD96B9B4C4E289E2E2FDE2E2E2FD88E2E2E2E2E2FA86FA89
          E2E2E289EA00312E36363E35384F520F616093386A7444C4C2CFD8C1BCBBC1C1
          C1BBACD078CE7A79A5788782C78883B0B0D483E3E3B7FD8888E2E2E2E2E188E2
          E2E2E2E2FA86EC89E2E3C8C4EA003B2E362E3D2D2D4F6061611A59956A4950B5
          C1D8CFD0ADBCCFCFC1BBAC67D0D0CE797976B1C77F8889E486898987E3B786E2
          E4DEC8DF84E7DBB3D4D481D4D4D4B5D1A1A178A4EA00252F2F252F382A4F6061
          615B6A956A6579B3C1D8BCD1BDACC2BBBBC1ACBDBDADB97979A4A57F8089E3B7
          B7E386E480E489E2B7DEDEDEC8DFE0C4C4E7C4E7D4A3B9AD74C0C8E4EA006D2E
          2F1D1E3859346161615B95436A4332DEBBD2D0BABCACC2ACACC2CECED0B9A179
          7678BAB37FE389E3B7E482C880C4E48888E2E2E2E28888E2E2E3C87CA479AFC7
          E3E2E289EA00323E2E1D3D3C24596161615B95956A74E2DEBBD8BCC2C5D0C2C2
          ACD0B4D1E084A1A196B3BD81E48786E3B7DE84B384C484E288FDE2E2E2FDFD86
          C9C0A5D4C9E4E386E2E2FA86EA0032323D1D2F4F4F4F6161605B95956A50CCB5
          C1CFD3BCD0B4B4CEC3CEADA9C6C982C8C4AFACC9C6D1D489E483B3D4B0B3C487
          FDE2E2E2E2E380AF7CC487E289E3FEE3E2E2E286EA0042362F043D38384F6061
          615B439F9F79CCBAC1D08FC2D0BDACBAB5D1B9ACC2D0C9E289A9C2E3E2BDCE85
          E483DBB3B5AFC4C9E2E2E282B1C4C9C7E3E2E2E289E3E386E2E2FA86EA002236
          32323E38388F5261615B9FB96576FCBACFD0ADA3797AA196D0D181D5D0BBBC82
          89B3D5FD88BDBAB7E3DE84E0C8C8E0B3B7B7E3C9C88688E2E2E2E2E289E3FEE3
          E2E2FA86EA004241413F36392D3C5B46615B656565A4CCCED3ACBC8FA17AB068
          68A378A3B0B5C2D0E4B7B785E4BDD1E38682C8D4D1DFE4EBDEEB8986E288E2E2
          E2E2E2E286E3E386E2E2FA86EA00422286228196674F59D2615BADB965A4CCBD
          D3C1BBBCAC96D1B0686868B07AD5C4B4D1E2C7B3EBBDD58786E382C9B3B5E489
          C9C9E289E288E2E2E2E2E2E2E3E3FEE3E2E2FAE3EA00402288214B39394F5961
          465B9F6565A4E1C2D3D3C1BBACC2ADA3A5B068B06876B0E3D4C7E2B3B4BDB082
          E4E38783C483E3FAAFE0E289E2E2E2E2E2E2E2E2E3E3E3E3E2E2E2E3EA004242
          21223596674FC261D271656565A4E196ACC1BCACC2BDADB9A3B0B06868B07886
          89E288E3DBBDAFC7C787C7C8C4C7E2FDEA83E289E2FDE2E2E2E2E2E2E3E3FEE3
          E2E289E3EA00364122223535673C596146719F6574A5E288B9CFBBACBDADB9A1
          BA7879B0D576B0EC86E28588E4ADE0C782878783C6E3898582E4E289E2E2E2E2
          E289E2E2E3E3E3E3E2E2E2E3EA003E21224096966767AC614671659FB97C89E3
          BCCFC1BBAC5F96A1A1BABA78B380E3E2E2E2E28886BAC8C78287E3B1B3838282
          DBC9C7C7C7E487C7C7C7C7C78282C7E4C6E3E480EA00411F8622CE3567673461
          465B9F65747BB7B1BBD3C1ACC2D0B9A1BAA1A1C8E1FCE1E188E2E288C9B487B7
          E382C782B1D9C8C8AF7DC9C9C9C98080C9C9C9C9C9DAC97DAFC0A374EA00CCFC
          E341CEA16796716146719F9FB97D83D5CFD2D3C1C2ADA1BAA3A4A4787D88E1E1
          FD8588FDB3B5E2E2E28782E3C7E3E2E2DFE487E4C6C6C7C883C8C8C8C4D4A4BA
          A1BA76D4EA00F0FC89DF39CE5F96BC6046719F9F74C8D4C4CFD2D3C1C2ADB978
          A3A4D579A479FDE188E18889B0B5FD8885E3C0D4C882DEC6DE89E2FAE2E2E2FA
          89E3C7B37AA376AFC97FC7C7EA00F088898A5FA15F6734614671959FB982B5C4
          C1D2D3C1ACD0ADCEA17A76A54D6BB7E1E1E1E1C6CEB38888FD7BA3A37CDE82B7
          E4E2E28989FDE289C8C0A3A4AFC8B7E386E2E3E3EA00F089898B67965F5FBC60
          4671959F65E4D5E7BBD2D2C1BC8FD0AD67A17A79797A87E1E185E2E4BDE088FD
          8876A4A4A383E3E3B7E2E2FA89E2C7C07879C4C6E3E3E3E386E286E3EA00F089
          898CCE8F96BD5B614671959F6582B5D4C1D2D2BBBCC2BD9FB9A178787879E2E1
          88E285FB8FDEFD88867976A4A3C9E4E4B7E2E28987B3A4A5DA87E2E2E3E3E3E3
          E3E2E3E3EA00F088898DCE3CA18F526146719F6565EAB5B5BBD3CFBBBCACC2D0
          B9BAA378BAB0B1807FC7C6E3C2E388E2C8A4A5A4B0DE82C8E389E2DE76A3C9C6
          86E3FA89E3E3E3E386E2E3E3EA00F0FD898DA84FA4C25246619365659FDFE0D1
          BBCFD8C1BCBCACD0B9A1A3D1BA7AA47AA3787CE3C28988887DA4A57AB1E4E3E4
          FB86C97A79C7E289FA86E289E3E3E3E3E3E2E3E3EA00F0898A8DA85F6734C146
          466A65AD9FC9DFD1BBD2D7D2C1BCBC8F9FB974A1BAA37AA37AA478E98F89E285
          B3A468A380E4E386E47C78AFE4E2E289E3E3E2FAE3E3E3E386E2E3E3EA00F086
          878DB4674F5B4746616A65659583E2D4BCD8D8D3D3C1BCC2BD8FBDADB9CEA1CE
          BA787CC7ADE2E2E2AFA4A5A382E3E3B7C0A3C4E389E2E286FE86E289E3E3E3E3
          E3E2E3E3EA00CC89E38DB55F4FBB6046616AAD6595DECCE4ACD8D3BBCFCFBBBC
          BCBCACC2BDBDBDBDADAF82D4CE88E2897CA4A5A382E3C7B076C8E2E3FAE2E289
          E3E3E2E3E3E3E3E3E3E2E3E3EA0088B7B7B3635F4F5BCF46619565659583E1E3
          ADD2D2C1C1BBBBC1C1BBBCACACBDADBAD483DAA1D588E2877979A4C087E4A5A4
          8289898986E2E286E386E286E3FBE3E3E3E2E3E3EA00888484B4A85F4F5B4746
          6195AD659FB1CCFBB3D2D8D3C1C1BBBCBCC1C1BCBCBCBCD0B0B3B5BDB588E280
          78A5A4B1B7A5A5C789FAFAE3E3E2E289E3E3FAE3E3E3E3E3E3E2E3E3EA00B7A8
          B4A7A85F4F5B6146619565659FC0FCE4D0D7D6D8D3CFC1C1BBBCBBC1C1BBBCAC
          BDD5BABCB3E185C9A3A5A4B1C0A5E4E2FA8989FE86E2E2E3E3E3E286E3E4E3E3
          E386E3E3EA008BB4A9A7A8675F5B6146479565659FA3FCDFCFD6D6D6D8D8D2D3
          CFC1BBBBBBC1BBBC8FBDD0C1E7E188AF76A57676C087FAE289FA86E3E3E2E2FE
          E3E3FAE3E3E4E3E3E386E3E3EA0022B5CEA9B4395FBB6146609FAD659F74CC86
          D0BCACD7D6D6D6D7D2D2C1C1BBBCBCBCC2D0ACD3DFE1E26BA5A4747C87FA89E2
          E3FA86FEE3E2E2E3E3E3E2E3E3E4E3E3E386E3E3EA00B78A81B4A8CE5F5BCF46
          609F65659F9FE1DEDBD4CEADC2BBD2D7D7D6D6D3BBBBBCC2A1D5C2D3C78887A4
          A574A1E3E289FAE2E386E3E3E3E2E2E3E3E386E3E3E4E3E3E386FBE3EA00B782
          63B581B4675B4746609565659F9FB374C2ACACBAB3E0D4D0C1D7D6D6D7D3C1BC
          D1E7BAC1E388B176BA74C8FDE2FA8989E389E3E3E3E2E2E3E3E386E3E3E4FBE3
          E3E3E3E3EA00B78B4B63B56367524746C19FAD659F95A178BDBCBCBBACC296D1
          B0BAD0C1D8D7D7CFD1C8B1C285887674A16BE2858989E389E3EC86E3E389E2E3
          E3E386E3E3E4C6E3E386FBE3EA008B8DB4A9B5B567525246529565659F6A74BA
          C1D3CFBBBBACC2D0B9BA74ADBDBBD7D3B9D484CE88E478A1A4B188E2FA86FE86
          E3FE86E3E3E3E2E3E3E3E3E3E3E4E8E3E3E3E3C6EA008D63A8A78181395BBB61
          5B6AAD659F9565ADCFCFC1CFBBBC8F8FADA3BAB98FD0C2C1CFD0C8D5E1B1BA76
          A38288FADE86E389E3E386E3E3E3E2E3E3E3E3E3E3E4B7E8E3E3FBC6EA008DB4
          A8B48B81C35B52615B6A9F656595A195C1C1C1CFC1BBBBBCC28FC28FB9C2BDA5
          BDBCB0B385A576A4A57F87EAB9B0E3E3E3FEE3E3E3E3E2E3E3E3E3E3E3E4B7C6
          E3E3E3C6EA0081A8A88488B567BC52615B959F9F9F95A4BAC1CFC1C1C1C1C1C1
          CFBBBCBBACAC71BDACBCBAE082A379A37CB0A3CEC2BCB4E3E3E3E3E3E3E3E2E3
          E3E3E3E3C6E4B7E8E3E3E3B7EA00B4A9C38385635F5BBB615B6A9F9F936AA3EA
          C2C1C1CFC1CFC1C1C1C1BCBCACC1ACBCACD0D5D4C0A5A4A484687AADADACBCEB
          E3E3E3E3E3E3E2E3E3E3E3E3B7E4E487E3E3C6B7EA00A9A7B683B7633C525B61
          5B959F95939374DEC2BBBCBCBBBBBBBBC1BBBCC1BBACACBDA4C0A4B0A3C0A47C
          C979D1797AADC2C2C4E3E3E3E3E3E2E3E3E3E3E3B7E4E4B7E3E3E887EA00A9C3
          348489B58F525B475B6A9F9593939FB0CFCFC1BCBCBCBCBCBBBCBBBCACD1A4C0
          7BDAB9D4C0C0A487C47879A4A46BBABDADC4E3E3E3E3E2E3E3E3E3E3B7E4E8E4
          E3E3E8E4EA00675FB684FC8D8F52BB605B6A959F939393B9D2D2D3CFBBC1C1CF
          D3BBADCEEAE4B1C07CC8DB8480A5B385A1AD79797A7AA3B9A1A1D4E3E3E3E3E3
          E3E3E3E3E4E4E487C6E3C6E4EA00B65BBC83CCFD5F5B5B475B59959F939371B0
          ACD2D2D2D8D2D8C18FB4E2E1E27EAFA5C4C7B1C8C8A5C686BA7879A4A3D17AA1
          B9A1ADD4E3E386E3FBE3E3E3E4E4E8E4C6E3C6E4EA00BCBB348BFC883C5BBC47
          5B93959F939371C0C9BA8FBBBCACB9D4E988E1E188C7A5C0C8C87C82C9C9FD87
          79A479A3A37AA37A7ABAA1ADB0C6E3E3C6E3E3E3E4E4E4E4E8E3C6E4EA005BBB
          C582E1FD8FBC71525B93959F6A93937488FD8CB5B4B581DF88FDE1E188C7C0C9
          C7B380C7B386E2877A7AA4A3A37A7AA3A3A3BAA1ADC486E3E4E3E3E3E4E4E4E4
          C6E3C6E4EA00BC52678A88893C3434475B716A9595939393E388B4A7C5B6B6C5
          A7A98CE185C8C4C7C6C97FC7C0C888867D7AA3A37AA3A37AA37A7AA374B0E3E3
          B7E3E3E387E4E4E4C6E3C6E4EA0034BB39B788B7674FAC52527193959F939371
          E4FDB5C3C5B6B6B6B6C5C5A8E2C8C786E2C7C7C87CC4E2E2E2DFE7DBC8B1A3A3
          A3D1A3A3A1AFE3E887E3E3E3E4E4E4E4C6E3E8E4EA00AC3CA78A8822AD8F5952
          5271939F9F939371AFFD63B6C5C5B6B6B6B6C5C5B4DFE3E2E3C7E3C77CC9E2E2
          E284B5B5D4DE83A378A3A3BAA3C8E3C6E4E3E3E3E4E4E4E4E8E3E4E4EA00B563
          A98AFD22968F4F525271719F9F6A93939F89FD63C5BBB6C5B6BCB6B6A7B4E3E3
          DFC6CBC77CC9E2DEC8B7E4D4D5B3E4C9BAA3A3A178C8E3C6E4C6E3C6E4E4E4E4
          E4E3E4E4EA00898BB3B785B7CE5F8F525234716A959F939371C7FDFD8CC5BBBC
          B6B6B6BC472CA9B7C5A786C4DB80877A9FC2C2BAD5B0DEE8B3A1BAB974C9E3B7
          E4E8E3C6E4C7E4E4E4E3E4E4EA00FC888288FD86A967BD5B5B719393659F9393
          71C0E2FDFD63BBB6BCB6B6B62C72D363BCBBB6B6DB7FE476B9C2C2B9D1CEB5E4
          E4D4B9ADA1C7E3C6E4C6FBC6E4E4E4E4E4E3E4E4EA00FCFC888888864B965F5B
          5B715993659595939395E3FDFE8AB6B6B6C5B6B6777277D37747C5A88287E4B0
          AC8FBA78A3D4CEB4C7E4DBD5C4E4E3B7E4E8E3C6E4E4E4E4E4E3E4E4EA00FCFC
          FCFCE28681965FAC4F7159936A959F939371B1E2FDFEBC47B6BCB6B673722C77
          7377C5A982C6E4B0AC8FA1BABA7AC9CED5E4E3E9DEE4E387E487E3E8E4C7E4E4
          E4E3E4E4EA00E1E188FCE28583A7674F5F34936A93659F959371B987FEFEC5BB
          BCB6B6527372BB737373D3C382E38681ACC2B9A1A1BAA480B4D1FBC6DEE4E3E4
          E4E4E3C6E4C7E4E4E4C6E4E4EA00E188E188FD88E396965F9F4F349559956A9F
          939395C986FE8CC3C5C5B677722C637373722CD182E3E2C8C2C2ADA1B9BAA1D5
          DED581E4E4E4E8E4E4E4E8E8E4C7E4E4E8C6E4E4EA00E188E188E18889A7A767
          5F8F71496A93959F95937178E489B7B5A8C3D37372BCB3737373732CDFE3E4D4
          ADD0ADD0B9A3BAA1D5C8D4EAAFBDBBBBC1C1C1C1C1C1C1C1C1C1C1C1EA00E1E1
          E1E1E1888863A7398F5F6A7495939F959F9371ADD9E3E2FDFEC5737373A79673
          73727277C387C8D5B9CEAD8FD0A1BAA17479C8DEE4C7E9E4E4E4E4E4E4C7E4E4
          E4C6E4C7EA008888E1E188E1888296398F4F9F749F596A9F9F959393A3E4E2E2
          FA477373BCB3C37373727377A8C7C8B0A1CEB98FAC8FB9BABABAA4E4E4E4E4E4
          E4E4E8E4E4E9E4E4E4E8E4C7EA00E188E1E188FD8889D5675F595965656A9565
          959F6A71A1C9E2E2FEBC772CB481BC737372722CC9C6DEB5BACEB9C2C1BBBDBA
          A3A378B3E4E4C6E4E4E4E4E4E4E9E4C7E4E8E4C7EA00888888888888888941A1
          8FAC5965956A749F9F9F957174A4E3E2E28AA7B583B5D373737377D5C7E384D5
          BACED0ACC1BBC2B9A1A3787AE4E4C6E4E4E4E8E4E4E9C7C7E4E8C7C7EA00E188
          E1888888FD8682B1789665496A95A3A1B9959F936578C8E2E2FAFA86C981B673
          7377CEC9C7E4D4D1D1D1C2BBC1C1ACBDBDBAA3A3DFE4C6E4E4E4E4E4E4DEE4E9
          C7E8E4C7EA00FD8888888888FD86827D7C7A749F6A957A7C6595956A65A3A586
          E2E2E2C6C4B5967777C5C9C9C7E4D5D0D1ADACACBBBCC28FBDBAA3BAD4E9C6E4
          E4E4E8E4E4DEC7E4C7C6E9C7EA008888FDE1FD8888FE8280B37978656A9F76AF
          D4AF74C0DABABAC7FAE2E2E4D463BA96A1AFDA7DC7E3B9BBD0C2C2ACBCBDCEBA
          BAB9A1B0CEDEC6E4C7E4E4E4E4C7E9C7C7E4E9C7EA00FD88888888FD8589E4C8
          B16878659574B1DE87E3E487B7C078C889FAE28779BA968F95A3C0D4C9C8BCCF
          C1C2B9D0BDD0D0B0B3B1B3CEADE9D5E4C7E4E4E4E4C7E9E9C7E4E9C7EA0088FD
          88888888E289B7C7807C7A74655082E389E3E3E3E3C7D4C7E3E389E3B4968F5B
          5295A174AFB3BBBDBDADBD8FB9CEBDBCACB3E4ADD1DED0E4E9E4E4E4C7E9C7E9
          C7E4E9C7EA00FD8888FDFD88E2E2E3877FB17978A17987FA86E3E3E3B7E3C6E3
          E286E2E3D167C26061AC9F9FC0B5CFAC8FA1A3BAA1CEBACEACC2EAC4EAC9D0E4
          C7E4E4E4C7DEC7E9C7E4E9C7EA0088FDFD85E288E2E2E3E3E4C9C06B6B7CE4EC
          86E3E3E387E3E2E2E3E3E282BA67C26046939F9FC0D1D3CFC1ACADA3A3BAA1A1
          D5BABAC7DBD5D0E4E9E4E4E4C7DEC7E9C7E4E9E9EA00FD858588E2E28989E286
          8780AF7979B3E486E3E3E3E3E4E3E2E2E3ECE383CE67C26061719F9FA5A1CFCF
          BBBCC2ADA1A3A3BAA1AFC9DEEBBAD0C7C7E4E4E4C7DEC7DEC7E4E9E9EA0085E2
          FDE285E2E2E289E2E3C8B3C07CB1C7E3E3E3E3E3E4E3FAE2E3FAE3C4965F8F60
          D2719F9FC0C4BDC1BCC2BDADB9A178BA74D4E4E4E4D4B9C7E9C7E4E4C7DEC7DE
          C7E4E9E9EA00FDE28585E2E2E2E289E28682C47CAF7DC7E3E3E3E3E3E4E3FA86
          E3E386C4675F8F6046939F9FD4E4C2D3C1ACBDADADB9CEA4D4C8E4E4C7E7D1C7
          E9E9E4C7C7DEC7DEE9E4E9E9EA00E2E285E2E2E2E2E289E289E4C9B3B1C9E4E3
          E3E3E3E3E4E3FA86E3E3E3B3965FBD4761AC9F9FAFAFBBD2BBACBD96B9ADA1C4
          DEDEE4E4E9D4B0C7DEE4C7E4C7DEC7DEE9E4DEDEEA00E2E2E2E2E2E2E2E289E2
          89C6C87DC9C887E3E3E3FBE3E4E486E3E3C6C8B4675FBD60617195ADAFB5C1D2
          D3ACADB974BA74BA81DEE4E4E9B4D5C7DEE9C7E9C7DEE9DEE9C7DEDEEA00E2E2
          E2E2E2E2898989E289E382C8C7E4E3E3E3E3E3C6E4B7FAE3E3E4DED15F5F8F52
          61719565AFB0BBD8D3BCBD9FB9A1BAA1A3DEE4E4DEB9B5C7DEE9C7E4C7DEE9DE
          DEC7E9DEEA00E2E2E2E2E2E2898989E2ECE38787E3C6E3E3E3E3E3B7E4B7ECE3
          E3C7C8B43CBD4F52617195ADAFD5BCD8CFBBC2BD95ADA174A3DEE4E4EABDB3E9
          DEE9C7E9C7DEE9E9DEC7DEDEEA00E2E2E2E2E2E289FA89FECBE3C6E3E3E3E3E3
          E3E3FBB7E4E4E3E3E3E483D58F67AC614693959FAFB4BBD2CFBCACC2ADB9B9AD
          D1C4C8E9E9D0C4E9DEE9E4E9C7DEE9DEDEC7E9DEEA00E2E2E2E2E289E289E3E2
          E3E3E3FA86FBE3E3E3E8C6E481C4E3E3E3E484D53CB9AC4661939F9FB3D1BCD2
          D3BBBCC2D074B9B974BABAA3DBD0C9E9DEE9C7E9C7DEDEDEDEC7DEDEEA00E289
          E2E2E2E2898986E2E2E3E3CBE3E3E3E3E3B7E884A7B5E4E3E382C4D55F8F5B46
          61939F9FC4B5BBD7D8CFBBACBDD0ADADB9B9A1B9B0D0DFE9DEE9C7E9C7E9DEDE
          DEC7E9DEEA00E289E2E2E28989E3E3E2E2E3E389E3E3E3E3E3B7E463CEB3C8C7
          E8DEC9B596AC5246616A9F95C9EAACD7D3CFCFBBACACC28FBDBDD0D1D4B9C8DE
          DEE9E9C7E9DEDEC8DEC7DEDEEA008989E2E2FA89E386E3E3CBE3E3ECE3E3E3E3
          E3E8E4B4CEC4DFC9E4C8C46367AC524661959F95C9E4ADD8D3C1C1C1C1C1BCAC
          C2BDBAB3BACEDEDEDEE9C7E9E9E9DEC8DEC7DEC8EA00FAE28989E2898986E3E3
          CBE3E3E3E3E8E3E3E3E4E4B4A8C9C9C8C7D4B4CE6734C14661BD9F95DBE4BAD7
          D8CFC1BBBBC1C1BBBBACCED5BDB9E9DEDEDEE9E9E9DEDEC8DEC7C8C8EA008989
          8689E386E3E3E3FA86E3E3E3E3E8E3FBC6E8E4A8D5C484E4DEB49696674F5246
          47959F95B0DEBCD6D6D8D2D3CFC1C1C1C1BBACADBCCEE9DEDEDEE9E9E9DEE9C8
          DEE9DEC8EA00FA8689CB8686E3E3E38686E3E3E3E3E4C6FBC6E4E481A9B4C9E4
          DE6396CE96C2C14660959F95A3E4BDBBD3D6D6D6D8D2CFBBBBBBACC2CFCEDEDE
          E9DEE9E9E9DEDEDEC8C7C8C8EA0086E3CB86E386E3E3E3E3E3E3E3E3E3E4C6E8
          C6E4E4B3A7A884C9C9C4B4BACE5F524660959F95A1DBBA96D0ADACCFD7D6D6D3
          C1BCB9BAC1BAE9DEDEDEE9E9E9E9DEC8C8E9DEC8EA00E386E386E386E3E3E3EC
          E3E3E3E3E3E4C6B7B7E4E48496CEB581C4C4A9A8A8BD5261C1959F959F74C2BB
          ACBDB9A1D0BBD3D6D7D3CEEAC2D5DEDEC8E9E9DEE9DEDEC8C8E9C8C8EA0086E3
          8686E3E3E3E3E3E3E3E3E3E3E3E4E4C6E4E4E4DE81CEB481B381A1CEB45F5261
          526A9F9595B9BCD3C1C1BC8FB9A19FACD3D7BDEAD1D4DEC8C8E9E9DEE9E9DEEA
          C8DEC8C8EA00E3E386E386E3E3E3E3E3E3E3E3E3E3E8E4E4E4E4E4C7C9A7D181
          D4B4A7CEB55F5247526A9F95959FC1CFCFC1BCACBDADD0BDBDACBBCED4B3C8DE
          C8E9DEDEE9DEDEC8C8DEC8C8EA00E3E386E386E3E3E3C6E3E3E3E3E3E3E4E4E4
          E4E4E4E9C9A7B4B381A9CEB5AF5F5B615B6A9F9595B9C1CFCFCFC1C1C1BBBBC2
          ACADD0BDB0EBC8C8C8DEE9DEE9E9DEEAC8DEEAC8EA00E3E386E3E3E3E3E387E3
          E3C6C6E3E3E4E8E4E4E4E4E984A7B5D4A8CE67E0D48FBB615B6A959395D4C2CF
          C1CFCFCFCFC1BBBBBBACC2CED5E0C8DEC8DEDEDEE9DEDEEAC8DEC8C8EA00E3E3
          E3E3E3E3E3E3B7E3E3E3E8E8E3E4E4E4E4E4E4DEC9CEA7C39696B6C4B54F52C1
          5295959393B0ACC1BBBBBBC1C1C1C1C1C2B9B3E7D1EBC8C8C8DEE9DEDEE9C8C8
          EADEEAC8EA00E3E3E3E3E3E3C6C6B7E3E3E8C6E3C6E4E4E4E4E4E4DEDEC8CE5B
          C25F34C4E7C25260526A959371B9CFD2CFBBBBC1D3BBACB9E7DFC8E7D4DFC8EA
          C8DEDEDEE9DEC8EAEADEC8C8EA00E3E3E3E3E3E3C6C687E3E3E3E8E8C6E4E4E4
          E4E4E4DEDEE4B4BCBCBCBCC4E45F52C15B6A9593719FBCD8D2D8D2D3BCBAC4DF
          C8C8C8DEDEDFC8EAC8DEE9C8DEDEC8EAEAC8EAC8EA00E3E3C6E3E3E3B7B787E3
          E3E8C6E8E3C7E4E4E4E4C7DEC8C7C95FBC52AC84E95F5B52526A9593719FE7BA
          BDC2D0D5EBEAEAEAC8EAC8DEC8DFC8EAC8C8DEC8E9DEC8EAEAC8EAC8EA00E3E3
          C6E3C6C6B7C687E3E3E4E8E8C6E9E4E4C7C7E9DEC8E9E4D54F478FC9DE5FBC52
          529395939393B1E4E4E4E9C7DEC8DFEAC8EAC8DEC8DFEAC8DEC8C8C8DEDEC8EA
          EAC8EAC8EA00C6C6E3C6C6C68787E4E3C6E4E4E4C6E9C7C7C7E4C7DEC8E9C683
          C3C13CDFC867AC5252716A6A9371C082E4E4C7E9DEC8DFEAC8EAC8DEDEC9EAEA
          C8C8DEC8E9C8C8EAEAC8EAC8EA00C6C6C6C6E3C6E4E887C6C6E4E4E4C6E9E4E9
          E4E9C7DEEAC7E8E4A94FADC9DFAD4F5B52716A959371A182E4E4C7C7DEC8DFC8
          C8EAEADEC8C9EAC8EAC8C8C8C8C8C8EAEAC8EAC8EA00E3C6C6C6C6B7C687E4FB
          C6E4E4E4E8E9C7C7E9E9C7DEC8E9E8C7C9B5D1C9EA968F5B527193956A716AC8
          E4C7E9C7DEC8EBDFEAEAEADEC8C9EAEAC8C8C8C8DDEAC8EAEAC8EAC8EA00C6B7
          87878787E4E487E8C6E4E4E4E4E9E9E9C7C7E9DEEAE9E4E4C7DEE7C883A15FBC
          527171956A7171D4E482DEE9C8EAC9C9C8C9EADEC8C9EAEAEAC8C8C8C8DEC8EA
          DFC8EAC8EA00E487C687C687E487E4C6E8E4E4E4E8DEC7C7E9E9E9C8EAE9E4C7
          E9C7E9DEC8D15FAC5B719395959371ADE4C7DEE9DEDFEBC9EAC9EAC8C8C9DFEA
          C8C8EADEC8DEC8DFC9C8EAEAEA00C68787E48787E487E4C6E4E4E4E4E4DEE9E9
          E9E9DEC8DFDEE4E9C7E9C7DEC8D4674F4F71936A956A7193B182DEE9E9C9C9C9
          EAC9EADEC8C9DFEAEAC8C8C8C8C8C8EAC9C8EAEAEA00E4C6E487E8878787E4C6
          E4E4E4C7E4DEE9E9DEDEDEC8DFE9E4E9C7DEC7DEE9C467BDBDAC59936A959371
          BAC7DEC7DEC9EBC9C8C9EAC8EAC9DFEAEAEAC8C8C8C8C8C9C9C8EAC8EA008787
          87878787E4E4E4E8E4C7C7C7E4DEDEE9DEE9DEC8DFDEE4C7C7DEE9E9E9C99667
          8F596A6A93956A7195C9DEE9C8C9EBC9EAC9DFC8C8C9DFEAEAC8C8C8C8C8C8EA
          C9EAEAC8EA00E487E487E487E4C7C7E8E4C7E4C7E4E9DEDEDEDEDEC8DFE9E4E9
          E9E9E9E9E9C7D15F8F8F65955995959393A4DEE9C8C9EBC9EAC9DFC8EAC9C9EA
          EAC8C8C8C8EAC8C9C9EAC9C8EA00E487E487E487C7E4C7E8E4C7E9E9C7DEDEE9
          DEE9E9C8EADEE4E9E9E9DEE9E9C7C4AD4F71959F6A95959571ADC4E9C8C9EBC9
          EAEBC9C8EAC9C9DFC8C8C8EAC8C8EAEAC9EAC9C8EA00E487C787E487C7C7C7E4
          E4C7C7C7C7DEDEDEDEDEDEC8DFDEE4E9E9E9DEDEE9E9C8D58FC26A69589F9595
          9395A4E9EAC9DAEAC8C9C9EAC8EBC9DFC8C8C8EAC8C8C8C9C9EAC9C8EA00E487
          C787E487C7E4C7E4E4E9E9E9C7DEDEE9DEE9DEC8EADEE4E9E9E9C8C8C8E9C8DB
          A4B98E9A707A9F6A6A95BADAEAC9EBEAEAEBC9EAC8EBEBC9C8EAC8EAC8C8EAC9
          C9EAC9EAEA00C77EE4C7C7C7C7C7C7E4E4C7C7C7E4C8DEDEDEDEDEEADFDEC8C9
          C8C93EB3B3DEC8DBC05C9A977079A4A174C0B9A5EAC9EBEAEAC9C9EAC8EBC9C9
          EAEAC8EAC8C8C8C9C9EAC9EAEA00C7E4C7C7E4C7C7C7C7E4C7E9E9E9E9C8DEDE
          C8E9DEC8C9C9B1B38468504D81C9C8DAD4989A9A62C4DFC8DE7FA4A4EAC9EBEA
          EAEBC9EAC8EBC9C9EAC8EAC8EAC8EAC9C9EAC9EAEA00C7C7C7C7C7C7C7C7C7E4
          C7E9E9E9C7C8DEC8C8DEDEC9B1B1B37C7B44507A68C4C8C9F1989A8EA5DEDE82
          C7DEC9B1EAEBC9DFEAEBC9EAC8EBC9C9EAEAC8EAC8C8C8EBC9EAC9EAEA00C7E4
          C7C7C7C7C7C7C7E4C7E9E9E9E9C8C8DEC8DEC8CDCD7B7B7C6850505068B3B3DD
          F29D9A5CD4DEDEC8C7DEC8C8EAC9EBDFD9EBC9C8EAEBC9C9EAC8EAC8EAC8EAC9
          C9D9C9EAEA00C7C7C7C7C7C7C7C7C7E4C7E9E9E9C7EAC8C8C8DED9CDAE517BAE
          517676684D687CE9ED9E986BB3C8C8C88282EAC8D9EBC4C4C4E0EBEAEAEBEBC9
          EAEAC8EAEAC8EAEBC9D9C9EAEA00C7C7C7C7C7C7C7C7C7E4C7E9DEDEE9C8DEC8
          DEC8BEAE7CAFC4B17C68797C684D7BE9C8CDA5A5B1C8C8C882DEC8EAEAEBE7B1
          DBAFC9EAEAEBEBC9EAC8EAEAEAC8EAEBC9D9C9EAEA00C7C7C7C7C7C7C7C7C7E9
          C7DEE9DEE9DFC8C9C483BEAEAE7B7B7B7C76767568817CC7E9C9D4D4C4C8C8C8
          8282DFC8C8DADBC4E7D4B3EAEAEBEBC9EAEAEAEAEAC8EAEBC9D9C9EAEA00C7C7
          C7C7C7C7828282C7C7DEDEDEE9C8EAB181C4B17568B37B51766B6D706D5D7BDD
          E9EAB1DB80C8C8C882DEC8EAEAC4C4DADAD4D4C4C9EBEBC9EAEAEAEAEAC8EAC9
          EBC9C9EAEA00C7C7C7C7C7C782C782E9C7DEE9DEE9EADFB381B1B16B503D5044
          5E6D70928E9E75BFDDC8C9C8DEC8C8C882DEEAC8EAE7B1C4E7AFAFB3DBC4EBC9
          EAEAEAEAEAC8EAEBC9C9C9D9EA00C7C782C7C7C7828282C7C7DEDEC9C8B3B37C
          7CB17B5E7A742974A35C6E979A9A99BFE9DDC8E9E9C8C8DEC782EAC8EAC4DBE7
          E7AFAFDBAFD4C4C9EAEAEAC8EAC8EAC9EBEBC9D9EA00C7C782C7C7C782C7DEE9
          C7DEC44D81AF81817CB3C04450443B3B485C9297979A99DDE9E9E9E9E9C8C8DE
          C782EAC8EAC4DBC4B1D4AFDBDBD4DBC9EAC8C8EAEAC8EAEBEBC9C9D9EA00E9C7
          82C7C7C782DE82C7E9C86879B3B3B3AFB5AF76354B503B7448746E97979299DD
          E9C7E9E9C7DEC8C88282C9C8C8EBE7DAEBAFAFDBDBD4DBC9EAEAEAC8EAC8EAEB
          EBEBC9D9EA00C7C782C782C7DEC7C8C7DE7C3579B3AF817C81515E487A483B25
          6ABB606C919299E9E9C7E9C7C7DEC8C88282C9C8EAC9C4C4B6B5B3DBDBD4E7C9
          EAC8C8EAEAC8EAEBEBC9C9D9EA00DEC7DE828282C87FC8C7E97950687C4DB068
          81686B50445F730000000000726EAAE9E9C7E9E9C7C8C8C882DEDFE9C9DBB3EB
          72A9C4DBDBD4E7C9EAEAEAEAD9C8D9EBEBEBC9D9EA0082827FC782827F82C8C7
          E97944687C7944797C4D764D960072775B60BB5A004ED9E9E9E9C7C7C7C8C8C8
          82DED4C5C5C3D4A800E7DADAB62CC4C9EAEAEAEAD9C8D9EBEBC9C9C9EA00DE82
          C882C782DEC87FE9C476797C6850446B797979632C7276503528586272C2C8E9
          E9C7E9E9CE730000007273737373B67777DBDBEA7300A9EBEAEAEAEAD9C8D9EB
          EBEBC9C9EA00C7827F82C8C87F7FC8766844447A687A4DD4687C754BBB727C44
          472B2B6200D9DE8BC147C7C7E9DEC8C882DEC9EAE7D4E700A7DBDBA800A7C4EB
          D9EAEAEAD9C8D9EBEBC9EBC9EA00DE82C8C8C77FC8C83E3D815035504DB07C81
          7CC07551A82C792C727372C572EAE9EA7273E9E9C7DEEAC882C8C9C8EBD4CE73
          E7D4E7BCA7C4D4D4B3AFD4B5D5B0D5D5D5D5D5D5EA00DD7FC87FC8C87F7D447A
          7C4B35766879B0684D7575B079792FBC435B357777EADE6300BBE9E9C7C8C8C8
          DEC8C9EBE7D4C3D3D3B6B5C3EBE7B3AFDBDBDBD4D4D4B5B0D5D5B0B5EA00C882
          C8C882C87F6850687C764B79797A7979797C7C6879797200000000000000B4BB
          00E7E9E9C7C8DFC882C8A7777773772CC5B6D1C0DBC4C4EBD9EAEAEAC9EADFDA
          EBEBEBC9EA00C87FC8C87F7F7D51687BAF68765078507A6868AFB57A7A3D4F52
          732DB6737681E7472CE9E9E9C7C8C9C8DEB3D4EBE7D4B3D4D5D5B0C0D4DBC4EB
          D9EAC8EAC9EAC9DADAEBEBC9EA00C87FC8C87F807C684CB3814D444450767CD4
          68AF7C797A505E7377352C676878D5BCC3E9E9E9E9C8C983828BC9E0B5D5D4BC
          2CC2BAB0C0AFC4EBC9EAEAEAC9EAC9EBDAEBEBC9EA00C8C8C8C8C87D7C4C7BB3
          687A443B7663AF68B0817C794B6B445B5B3B527678656DAABEE9E9E9C7C8C983
          DEC8EBEB77D372000047D1D5C0B0C4EBC9EAEAEAC9EAC9DADAEBEBC9EA00C8C8
          C8C880B17DC97BAF7644764468AFB5B07C816879BB7352302B4335659F708E70
          9BDDE9E9E9C8EA83DE83DFB5000077C372A9D4AFD4D1DBDBDFD9EAEAC9EAC9EB
          DAEBEBC9EA00C8C8C8B1B17DC97C7C7C4D8168797CB5B07981D468793C000072
          722C7465576E976E99DDE9E9E9C8C983C8EADFDF47C381D3BCD1CED4DBB0D4B5
          C9D9EAEAC9EAC9DADAEBEBC9EA00C8C8C87B7BB17C4D7C68B3B1AF4468684D7C
          B37C687A443B2B432B2A436A7092928E99DDE9E9DDC8D983C8C8DFC3D3727272
          B4C0D5D1DBDBB0D4C9D9EAEAC9EAC9EBDAEBEBC9EA00C8C8B17B4C7B3E7C7C81
          B1B1B37CAFD46881AF797A5E6549492B30242859706E6E98CDDDDDDDE9C8C9DF
          C8C8DFA77372000000B6D5AFC4DBD1B5C9D9EAEAC9EAC9DADAEBEBC9EA00C8C8
          4CB17B813E7C7B7CB3C4B37C81AFB0688150447443303026261C2430749862AA
          E5DDE9DDE9C8C9C8C8C8D9EBE7E7AFB4C5A7B0DBEBE7B5D4C9D9EAEAC9EAC9EB
          DAEBEBC9EA00C8807BB17D4C684C81AFB3B1B1B181B0B0B0B05E65302628281A
          191C282B78A5AFC9E9DDDDDDE9C8C9C8C8C8C9C4E7DBAFDBAFB5C4C9EBDAD4B3
          C9D9EAEAC9EAC9DADAEBEBC9EA0080B1C47D7DB17BB37B7CB3B3B1B17C68B079
          4D503B302624281C1C2630307A68C0C9E9E9E9E9C7C8DFC8C8C8C9C4E7D4AFDB
          DBD4D4EBC9E7B0DBC9D9EAEAC9D9C9EBDAEBEBC9EA00B14CC4C97DB1C4B14C7C
          AFAFB3B1B079B04DB079504326282A1C232A433B7A68B1B1E9E9E9E9E9C8DF83
          C8C8C9E7DBB3D4B3DBD4B0DAEBDBD5DBC9D9EAEAC9D9C9DADAEBEBC9EA00C47C
          B17D7DB1B1B1B1B37C7CB3B37C68AF7C7C7C68492438282623283B50447AAFE9
          E9E9E9E9DEC8C983C8C8C9C4DBD4D4DBDBB5B0DBDADBD5C4C9D9EAEAC9D9C9EB
          DAEBEBC9EA00B17CB17DB17B7B7BB1B3AF7CB1C468D4B3D47CB579492A492428
          1C2749657876AFC8E9E9E9E9C8C8C983C883C9E7DBD4D4AFB3C0D5B0B0C0D5DA
          C9D9EAEAC9D9C9DADAEBEBC9EA00B17CB1B1B17B4C7B7DC4B3B3B1B37CAF81D4
          7CA544492A433026231A24286B79DBC8E9E9DDDDC7EDF1F1F2D9C9DBF3D4D4C0
          D5F5BABAD5B0D5EBDAEDD9EAC9D9C9EBDAEBEBC9EA00B3B17D7D7DB14C7B7BB1
          B3B3C4B381D4D481B06B3B434943261A1B1B1C285E76B5EADDDDDDEEF3F8F8F8
          F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F1C9D9C9DADAEBEBC9EA0080B1
          B3B1C97D7B4C7CD4AFAFD4C07CD46868765E314349302623231C2628C0767CEA
          EFDDDDF1F8F6F6F6F6F7F7F7F8F4F4F5F5CEF4F4F4F6F4F6F8F8F8F8C9D9C9EB
          DAEBEBC9EA007DB1B17DC97DC47B7C7C7C8168797CB079B06BA344434324244E
          69694E575C62AEEADDDDE6F5F8F1F1DF8380DFE7DBB0D5B5D4C0B4D1BAADD1F3
          F5F6F8F9C9D9C9DADAEBEBC9EA00C4C4B1C9D97D7D7B68686868687968C079A5
          6B443B492B274E9297924E5A5C99CDD9EFDDEFF7F8F8C9F1F7F8F9F6F3D4B3F9
          B0D1F6F8F9F8F5DAD9EDF6F8C9D9C9EBDAEBEBC9EA007D7DB1C9807DB17B5179
          68B57679797976796B4949492B235A9797976E577098CDDAD9DDDDF6F8F8F5F9
          F8F5F5F6F9F7D4F8F5F9F8F4F5F6F9F7C9EAF6F8C9D9C9DADAEBEBC9EA007D7D
          7D7DC97D7D7B5150505044507A4444764443652A282664979797925A6E98CDDA
          EDC8EFF3F8F7F9F5DEC8EBDAD5F9B5F6F9F5B3AFD4B5F1F9EBC8F6F9C9D9C9EB
          DAEBEBC9EA00C9C9C9C97D7DB17B4D44443B654444356535492B3828241B6497
          90909092979874DAD9C8EAF2F8F2F983C8C8C9C4D4F8F5D5F9D4D4DBDBD4DBF6
          F5D9F6F8C9D9C9DADAEBEBC9EA0080C9C9C97DC97B4C79443B49652B492A282A
          433024281C566497909097976E5744DADAD9D9E5F8C8F9DFC8C8C9C4D4F8F581
          F9D4D4DBC4DBC4F8F3EAF6F8C9D9C9EBDAEBEBC9EA0080C980C980C9C4AF3D74
          492B24243B3B49493149301B1B5A64979797926957262B78796B68F3F8C8F8F7
          C883C4B3F5F9B5B5F8F6C4DFC9E7F5F9EDF3F6F9C9D9C9DADAEBEBC9EA008080
          80C9C9C97DB33D4474242A654835A1357449301C1B569197979297695828283B
          744978F1F8F3F2F9F9F6F6F9F9F5D4DBD4F9F9F6F6F9F9F3C9F6F7F8C9D9C9EB
          DAEBEBC9EA00C9C9C9C980C97D7C4D793538303B3B653B3B4343261C133A6492
          91976469572A28493B2AB0E5F8F8F3D9F5F6F6F7DAE7C4EBDAE7F5F6F6F7E7F1
          F7F8F8F8C9D9C9DADAEBEBC9EA00C9C9C9C9C97DB17C4D683530284343316565
          4328261C1913566464925A6957282843652830A5F7F8F8F6F6F7F7F7F6F7F7F7
          F7F7F7F6F6F6F6F8F8F8F8F8C9D9C9EBDAEBEBC9EA007DC9C9C9C97DB17BAF68
          742A1C2A2B4935444449492423235A3A5A5A5A694E2830433B2A2851E6F5F6F6
          F7F5F7F7F6F7F7F7F7F7F7F7F7F6F6F6F7F8F6EDC9D9C9DADAEBEBC9EA00C9C9
          7DC9C97DB1B1B17C652A2849653174507878442826235A0E234E5A5A28242A2B
          3B302BC8E9EAC983D9D9C9EBDAE0C4C9E0C4C4EBF2DBC4DAEBC9D9D9C9D9C9EB
          DAEBEBC9EA007DC97DC9807DC97D817C503549444444787A4478784326233A0E
          0E1B232324282A303B4344DDE9C8C9DF83C8C9DADAC4C4C9DAC4C4EBEBE7C4DA
          C9C9EAD9C9D9C9DADAEBEBC9EA00C9C9C9C9C9C9C9C47B7C68503B7A507A7A79
          4B784843271C161A1313232628282A284950DDDDE9C8C98383C8C9DAC4DAC4EB
          C4E7C4EBEBE7C4DAEBC9D9C9D9C9C9C4C47D7DC9EA00C9C9C9C980C97D7DB1AF
          7C5044504444787A5044493024230E19130E1A1C1C302A2A49314468E9C8C9C9
          83C8C9DAC4E7DAC9C4E7C4EBEBE7C4DAC9C9C9C97D7D363632363636EA00C9C9
          C9C9807DC9C9B1B3817A50787A7844787A652B2A261C1A180E1613192630242A
          3B494976E9C8C9C983C8C9DAE7DBC4EBC4E7C4EBEBE7C4DAC9C98036367D3636
          3636367DEA00C9C9C9C9C9C97DB1B1AF68795074505035354449302824261B18
          130E131A28281B24744844DDE9C8DF848083C9DAE7DBC4C9C4E7C4EBEBE7C4DA
          7D7D36367D367D363636367DEA007DC9C9C980C9B1B17BAF797A78447679743B
          A149382826261A13163A131A2A2B2324785EB1DDE9C8EA80DF80C9DAC4DBDBDA
          C4E7C4DAEBE7C4363636367D367D36363636367DEA00B1C97D7D7DC4B17BB37C
          687950357478352B49433026231C0E16555518192A492328444DDDDDE9C8C8DF
          80C9C9C9EBC4DBC4C4E7C4DAC97B3232367D7D7D7D367D363636367DEA00B37D
          B1B1B17C4C7B817CB5687A35483BA149302A2623131816919164561A1C282728
          747CE9DDE9C8C8C88380EBC9EBC4DAEBC4DBC4DA3632323636363636367D3636
          3636367DEA00C47D7CB14C687C7C687C7C68794430262B301C28260E0E185697
          9797561B1C241C4368DDDDDDE9C8C88383C9C9C9EBC4DAC9C4DBC43636323636
          367D36367D7D36363636367DEA00}
      end
      object edtDir: TEdit
        Left = 168
        Top = 162
        Width = 152
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 0
      end
      object cbbWinner: TComboBox
        Left = 142
        Top = 87
        Width = 188
        Height = 24
        BevelInner = bvLowered
        Ctl3D = False
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clRed
        Font.Height = -13
        Font.Name = 'Tahoma'
        Font.Style = [fsBold]
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        ParentCtl3D = False
        ParentFont = False
        TabOrder = 1
        OnDropDown = cbbWinnerDropDown
        OnKeyDown = cbbWinnerKeyDown
        OnKeyPress = cbbWinnerKeyPress
      end
      object cbAutoContinuous: TCheckBox
        Left = 5
        Top = 223
        Width = 97
        Height = 17
        Caption = #36830#32493#33258#21160#21047
        TabOrder = 2
        OnClick = cbAutoContinuousClick
      end
      object cbHide: TCheckBox
        Left = 180
        Top = 222
        Width = 97
        Height = 17
        Caption = #38544#34255#28216#25103#31383#21475
        TabOrder = 3
        OnClick = cbHideClick
      end
      object pnlTitle: TPanel
        Left = 0
        Top = 0
        Width = 450
        Height = 41
        Align = alTop
        BevelInner = bvRaised
        BevelOuter = bvLowered
        BorderWidth = 2
        BorderStyle = bsSingle
        Caption = 'QQ'#22235#22269#20891#26071#21047#20998#22120'v1.1'
        Color = clTeal
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clRed
        Font.Height = -19
        Font.Name = 'Courier New'
        Font.Style = [fsBold]
        ParentFont = False
        TabOrder = 4
      end
      object cbSmart: TCheckBox
        Left = 5
        Top = 165
        Width = 161
        Height = 17
        Caption = #26234#33021#23545#22869'   '#38656#25351#23450#22797#30424#25991#20214
        TabOrder = 5
        OnClick = cbSmartClick
      end
      object rgModel: TRadioGroup
        Left = 1
        Top = 46
        Width = 351
        Height = 39
        Align = alCustom
        Caption = #36873#25321#21047#20998#27169#24335
        Columns = 2
        ItemIndex = 0
        Items.Strings = (
          '1'#32452#20004#20154#23545#25112
          '2'#32452#20004#20154#23545#25112)
        TabOrder = 6
        OnClick = rgModelClick
      end
      object cbbLoser: TComboBox
        Left = 142
        Top = 117
        Width = 188
        Height = 24
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -13
        Font.Name = 'Tahoma'
        Font.Style = []
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        ParentFont = False
        TabOrder = 7
        OnDropDown = cbbLoserDropDown
        OnKeyDown = cbbLoserKeyDown
        OnKeyPress = cbbLoserKeyPress
      end
      object btnAutoPlay: TButton
        Left = 15
        Top = 254
        Width = 79
        Height = 39
        BiDiMode = bdLeftToRight
        Caption = #24320#22987#21047#20998
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clMenuHighlight
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentBiDiMode = False
        ParentFont = False
        TabOrder = 8
        OnClick = btnAutoPlayClick
      end
      object btnExit: TButton
        Left = 229
        Top = 254
        Width = 79
        Height = 39
        Caption = #36864'    '#20986
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clInactiveCaption
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
        TabOrder = 9
        OnClick = btnExitClick
      end
      object cbAddSpeed: TCheckBox
        Left = 38
        Top = 187
        Width = 61
        Height = 12
        Caption = ' '#21152'    '#36895
        Color = clMoneyGreen
        Ctl3D = False
        ParentColor = False
        ParentCtl3D = False
        TabOrder = 10
        OnClick = cbAddSpeedClick
      end
      object bbtnHelp: TBitBtn
        Left = 336
        Top = 253
        Width = 79
        Height = 39
        Cursor = crHelp
        Hint = #21047#20998#22120#20351#29992#35828#26126
        BiDiMode = bdRightToLeft
        Caption = #24110'  '#21161
        DoubleBuffered = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -13
        Font.Name = 'Tahoma'
        Font.Style = []
        Layout = blGlyphRight
        ParentBiDiMode = False
        ParentDoubleBuffered = False
        ParentFont = False
        ParentShowHint = False
        ShowHint = True
        TabOrder = 11
        WordWrap = True
        OnClick = bbtnHelpClick
      end
      object sbRegister: TStatusBar
        Left = 0
        Top = 292
        Width = 450
        Height = 27
        BorderWidth = 2
        Color = clMoneyGreen
        Panels = <
          item
            Width = 170
          end
          item
            Width = 100
          end
          item
            Text = '//'#35282#33394#29256' 2.1 Beta06 Build020'
            Width = 150
          end>
      end
      object bbtnRegister: TBitBtn
        Left = 122
        Top = 253
        Width = 79
        Height = 39
        Caption = #27880'  '#20876
        DoubleBuffered = True
        ParentDoubleBuffered = False
        TabOrder = 13
        OnClick = bbtnRegisterClick
      end
      object odSetDir: TOpenDialog
        DefaultExt = 'jgs'
        Left = 328
        Top = 119
      end
    end
    

    //注册窗体文件

    object frmRegister: TfrmRegister
      Left = 504
      Top = 235
      BorderStyle = bsDialog
      BorderWidth = 3
      Caption = #27880#20876
      ClientHeight = 122
      ClientWidth = 208
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poMainFormCenter
      OnShow = FormShow
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 10
        Top = 16
        Width = 48
        Height = 13
        Caption = #29992#25143#21517#65306
      end
      object Label2: TLabel
        Left = 12
        Top = 53
        Width = 48
        Height = 13
        Caption = #27880#20876#30721#65306
      end
      object bbtnOK: TBitBtn
        Left = 66
        Top = 87
        Width = 77
        Height = 31
        Caption = #30830'  '#23450
        DoubleBuffered = True
        ParentDoubleBuffered = False
        TabOrder = 0
        OnClick = bbtnOKClick
      end
      object edtUser: TEdit
        Left = 60
        Top = 13
        Width = 121
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 1
        OnKeyPress = edtUserKeyPress
      end
      object edtPsw: TEdit
        Left = 61
        Top = 50
        Width = 121
        Height = 21
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        TabOrder = 2
        OnKeyPress = edtPswKeyPress
      end
    end
    

    //帮助提示窗体文件

    object frmHelp: TfrmHelp
      Left = 526
      Top = 320
      BorderStyle = bsDialog
      Caption = #21047#20998#22120#20351#29992#35828#26126
      ClientHeight = 236
      ClientWidth = 450
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poMainFormCenter
      PixelsPerInch = 96
      TextHeight = 13
      object reHelp: TRichEdit
        Left = 2
        Top = 3
        Width = 446
        Height = 233
        BevelInner = bvLowered
        BevelWidth = 2
        BorderWidth = 1
        Color = clSkyBlue
        Font.Charset = GB2312_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ImeName = #20013#25991' ('#31616#20307') - '#19975#33021#20116#31508#20869#32622#36755#20837#27861
        Lines.Strings = (
          '                 '#21047#20998#22120#20351#29992#35828#26126#65288'BlackSnake     2010.06.06'#65289
          '1. '#21047#20998#22120#26377#20004#31181#27169#24335#65288#30446#21069#20165#25903#25345#20004#20154#29609#65289#65306#21363'1'#32452#20004#20154#29609#21644'2'#32452#20004#20154#29609
          '2. 1'#32452#20004#20154#23545#25112#26102#65292#36873#25321#35201#36194#20998#30340'QQ'#21495#65292#21363#21487#20197#23454#29616#21047#20998#65307#22914#26524#21246#36873#8220#36830#32493#33258#21160#21047#8221
          #21017#21487#20197#23454#29616#36830#32493#21047#20998#65307#22914#26524#24819#38544#34255#28216#25103#31383#21475#65292#21017#21487#20197#21246#36873#8220#38544#34255#28216#25103#31383#21475#8221#12290
          '3. 2'#32452#20004#20154#23545#25112#65292#21363'ABC'#21047#20998#27169#24335#65292#29992'3'#20010#21495#65292#20551#35774#23567#21495#65288'C'#65289#22312#20302#20998#21306#36127#36131#36755#20998#65292#20013
          #21495#65288'B'#65289#24320#20004#20010#25151#38388#20998#21035#36827#20837#39640#20998#21306#21644#20302#20998#21306#36127#36131#36716#20998'('#20998#25968#22312'50-59'#20998')'#65292#22823#21495#65288'A'#65289
          #22312#39640#20998#21306#12290#24320'2'#32452#65292'1'#32452#20026'A'#23545#25112'B'#65292'1'#32452#20026'B'#23545#25112'C'#65292#21482#35201#36873#23450#35201#36194#20998#30340'QQ'#65288'A'#65289#21644#36755
          #20998#30340'QQ'#65288'C'#65289#65292#37027#20040'A'#21487#20197#30452#25509#21047#21040#21496#20196#20197#19978#12290
          '4. '#20026#22686#21152#36259#21619#24615#65292#26412#21047#20998#22120#22686#21152#20102#26234#33021#23545#22869#21151#33021#65292#20027#35201#21033#29992#20004#20154#22797#30424#25968#25454#23454#29616#65292#25152
          #20197#19968#23450#35201#35774#23450#22797#30424#25991#20214#12290#21246#36873#8220#21152#36895#8221#21151#33021#26159#25351#36798#21040#35268#23450#27493#25968#21363#25552#21069#32456#27490#12290
          #27880#24847#65306#30446#21069#20165#25903#25345#19978#19979#20301#30340#24773#24418#65292#21363#21452#26041#20998#21035#22352#22312#19978#20301#21644#19979#20301#65288#24038#21491#20301#21047#19981#20102#65289#12290
          '5. '#22914#35201#25171#24320#22810#20010#21047#20998#22120#36827#34892#21047#20998#26102#65292#24517#39035#20808#36816#34892#21047#20998#22120#20877#36827#20837#28216#25103#12290
          '6. '#26412#21047#20998#22120#20165#20379#23398#20064#20132#27969#20043#29992#65292#19981#24471#29992#20110#21830#19994#30446#30340#65292#21542#21017#21518#26524#33258#36127#12290
          ' ')
        ParentFont = False
        TabOrder = 0
      end
    end
    
  • 相关阅读:
    Vue.js笔记
    WebPack笔记
    Js笔记(对象,构造函数,原型,原型链,继承)及一些不熟悉的语法
    JS在严格模式和非严格模式的区别
    原生js实现ajax与jquery的ajax库,及json
    原生js实现一个简单的轮播图
    HTML load事件和DOMCOntentLoaded事件
    HTML <script> 标签的 defer 和 async 属性
    网站favicon图标的显示问题
    python 取出aws中ip有,zabbix中没有的ip
  • 原文地址:https://www.cnblogs.com/boltwolf/p/2084741.html
Copyright © 2011-2022 走看看