Plugin Directory

Changeset 426941


Ignore:
Timestamp:
08/22/2011 04:55:17 AM (15 years ago)
Author:
Denis Buka
Message:
 
Location:
drop-in-dropbox/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • drop-in-dropbox/trunk/DropboxUploader.php

    r426902 r426941  
    11<?php
     2
    23/**
     4
    35 * Dropbox Uploader
    4  *
     6
     7 *
     8
    59 * Copyright (c) 2009 Jaka Jancar
    6  *
     10
     11 *
     12
    713 * Permission is hereby granted, free of charge, to any person obtaining a copy
     14
    815 * of this software and associated documentation files (the "Software"), to deal
     16
    917 * in the Software without restriction, including without limitation the rights
     18
    1019 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     20
    1121 * copies of the Software, and to permit persons to whom the Software is
     22
    1223 * furnished to do so, subject to the following conditions:
    13  *
     24
     25 *
     26
    1427 * The above copyright notice and this permission notice shall be included in
     28
    1529 * all copies or substantial portions of the Software.
    16  *
     30
     31 *
     32
    1733 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     34
    1835 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     36
    1937 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     38
    2039 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     40
    2141 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     42
    2243 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     44
    2345 * THE SOFTWARE.
     46
    2447 *
     48
    2549 * @author Jaka Jancar [jaka@kubje.org] [http://jaka.kubje.org/]
     50
    2651 * @version 1.1.5
     52
    2753 */
     54
    2855class DropboxUploader {
     56
    2957    protected $email;
     58
    3059    protected $password;
     60
    3161    protected $caCertSourceType = self::CACERT_SOURCE_SYSTEM;
     62
    3263    const CACERT_SOURCE_SYSTEM = 0;
     64
    3365    const CACERT_SOURCE_FILE = 1;
     66
    3467    const CACERT_SOURCE_DIR = 2;
     68
    3569    protected $caCertSource;
     70
    3671    protected $loggedIn = false;
     72
    3773    protected $cookies = array();
    38    
     74
     75   
     76
    3977    /**
     78
    4079     * Constructor
     80
    4181     *
     82
    4283     * @param string $email
     84
    4385     * @param string|null $password
     86
    4487     */
     88
    4589    public function __construct($email, $password) {
     90
    4691        // Check requirements
     92
    4793        if (!extension_loaded('curl'))
     94
    4895            throw new Exception('DropboxUploader requires the cURL extension.');
    49        
     96
     97       
     98
    5099        $this->email = $email;
     100
    51101        $this->password = $password;
    52     }
    53    
     102
     103    }
     104
     105   
     106
    54107    public function setCaCertificateFile($file)
     108
    55109    {
     110
    56111        $this->caCertSourceType = self::CACERT_SOURCE_FILE;
     112
    57113        $this->caCertSource = $file;
    58     }
    59    
     114
     115    }
     116
     117   
     118
    60119    public function setCaCertificateDir($dir)
     120
    61121    {
     122
    62123        $this->caCertSourceType = self::CACERT_SOURCE_DIR;
     124
    63125        $this->caCertSource = $dir;
    64     }
    65    
     126
     127    }
     128
     129   
     130
    66131    public function upload($filename, $remoteDir='/') {
     132
    67133        if (!file_exists($filename) or !is_file($filename) or !is_readable($filename))
     134
    68135            throw new Exception("File '$filename' does not exist or is not readable.");
    69        
     136
     137       
     138
    70139        if (!is_string($remoteDir))
     140
    71141            throw new Exception("Remote directory must be a string, is ".gettype($remoteDir)." instead.");
    72        
     142
     143       
     144
    73145        if (!$this->loggedIn)
     146
    74147            $this->login();
    75        
     148
     149       
     150
    76151        $data = $this->request('https://www.dropbox.com/home');
     152
    77153        $token = $this->extractToken($data, 'https://dl-web.dropbox.com/upload');
    78        
     154
     155       
     156
    79157        $data = $this->request('https://dl-web.dropbox.com/upload', true, array('plain'=>'yes', 'file'=>'@'.$filename, 'dest'=>$remoteDir, 't'=>$token));
     158
    80159        if (strpos($data, 'HTTP/1.1 302 FOUND') === false)
     160
    81161            throw new Exception('Upload failed!');
    82     }
    83    
     162
     163    }
     164
     165   
     166
    84167    protected function login() {
     168
    85169        $data = $this->request('https://www.dropbox.com/login');
     170
    86171        $token = $this->extractToken($data, '/login');
    87        
     172
     173       
     174
    88175        $data = $this->request('https://www.dropbox.com/login', true, array('login_email'=>$this->email, 'login_password'=>$this->password, 't'=>$token));
    89        
     176
     177       
     178
    90179        if (stripos($data, 'location: /home') === false)
     180
    91181            throw new Exception('Login unsuccessful.');
    92        
     182
     183       
     184
    93185        $this->loggedIn = true;
    94     }
     186
     187    }
     188
     189
    95190
    96191    protected function request($url, $post=false, $postData=array()) {
     192
    97193        $ch = curl_init();
     194
    98195        curl_setopt($ch, CURLOPT_URL, $url);
     196
    99197        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
     198
    100199        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
     200
    101201        switch ($this->caCertSourceType) {
     202
    102203            case self::CACERT_SOURCE_FILE:
     204
    103205                curl_setopt($ch, CURLOPT_CAINFO, $this->caCertSource);
     206
    104207                break;
     208
    105209            case self::CACERT_SOURCE_DIR:
     210
    106211                curl_setopt($ch, CURLOPT_CAPATH, $this->caCertSource);
     212
    107213                break;
     214
    108215        }
     216
    109217        curl_setopt($ch, CURLOPT_HEADER, 1);
     218
    110219        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     220
    111221        if ($post) {
     222
    112223            curl_setopt($ch, CURLOPT_POST, $post);
     224
    113225            curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
     226
    114227        }
    115        
     228
     229       
     230
    116231        // Send cookies
     232
    117233        $rawCookies = array();
     234
    118235        foreach ($this->cookies as $k=>$v)
     236
    119237            $rawCookies[] = "$k=$v";
     238
    120239        $rawCookies = implode(';', $rawCookies);
     240
    121241        curl_setopt($ch, CURLOPT_COOKIE, $rawCookies);
    122        
     242
     243       
     244
    123245        $data = curl_exec($ch);
    124        
     246
     247       
     248
    125249        if ($data === false)
     250
    126251            throw new Exception('Cannot execute request: '.curl_error($ch));
    127        
     252
     253       
     254
    128255        // Store received cookies
     256
    129257        preg_match_all('/Set-Cookie: ([^=]+)=(.*?);/i', $data, $matches, PREG_SET_ORDER);
     258
    130259        foreach ($matches as $match)
     260
    131261            $this->cookies[$match[1]] = $match[2];
    132        
     262
     263       
     264
    133265        curl_close($ch);
    134        
     266
     267       
     268
    135269        return $data;
    136     }
     270
     271    }
     272
     273
    137274
    138275    protected function extractToken($html, $formAction) {
     276
    139277        if (!preg_match('/<form [^>]*'.preg_quote($formAction, '/').'[^>]*>.*?(<input [^>]*name="t" [^>]*value="(.*?)"[^>]*>).*?<\/form>/is', $html, $matches) || !isset($matches[2]))
     278
    140279            throw new Exception("Cannot extract token! (form action=$formAction)");
     280
    141281        return $matches[2];
    142     }
     282
     283    }
     284
     285
    143286
    144287}
     288
  • drop-in-dropbox/trunk/a.charset.php

    r426902 r426941  
    11<?php
    22
     3
    34// libs/a/a.charset.php
    45
     6
    57// (c) Yuri Popoff, Nov 2003, popoff.donetsk.ua
    68
     9
    710// A set of functions to process charsets
    811
    912
    1013
     14
     15
    1116function _charset_count_bad($s)
    1217
     18
    1319{ //count "bad" symbols in russian, in windows-1251
    1420
     21
    1522  $r=0;
    1623
     24
    1725  for($i=0;$i<strlen($s);$i++)
    1826
    19   {
     27
     28  {
     29
    2030
    2131    switch($s[$i])
    2232
     33
    2334    {
    2435
     36
    2537      case '¸':
    2638
     39
    2740      case '¨':
    2841
     42
    2943      case '«':
    3044
     45
    3146      case '»':
    3247
     48
    3349        break;
    3450
     51
    3552      default:
    3653
     54
    3755        $c=ord($s[$i]);
    3856
     57
    3958        if($c>=0x80&&$c<0xc0||$c<32)
    4059
     60
    4161          $r++;
    4262
     63
    4364    }
    4465
    45   }
     66
     67  }
     68
    4669
    4770  return $r;
    4871
     72
    4973}
    5074
    5175
    5276
     77
     78
    5379function _charset_count_chars($s)
    5480
     81
    5582{ //count "good" symbols in russian, in windows-1251
    5683
     84
    5785  $r=0;
    5886
     87
    5988  for($i=0;$i<strlen($s);$i++)
    6089
    61   {
     90
     91  {
     92
    6293
    6394    $c=ord($s[$i]);
    6495
     96
    6597    if($c>=0xc0)
    6698
     99
    67100      $r++;
    68101
    69   }
     102
     103  }
     104
    70105
    71106  return $r;
    72107
     108
    73109}
    74110
    75111
    76112
     113
     114
    77115function _charset_count_pairs($s)
    78116
     117
    79118{ //count "bad" pairs of chars for a string in russian, in windows-1251
    80119
     120
    81121  $a=array(
    82122
     123
    83124    0 => 'úûü',
    84125
     126
    85127    1 => 'éïôý',
    86128
     129
    87130    2 => 'éôý',
    88131
     132
    89133    3 => 'æéïôõöùúûüýþ',
    90134
     135
    91136    4 => 'éôù',
    92137
     138
    93139    5 => 'úûü',
    94140
     141
    95142    6 => 'çéòôõøùúûýÿ',
    96143
     144
    97145    7 => 'éïôõù',
    98146
     147
    99148    8 => 'úûü',
    100149
     150
    101151    9 => 'àáæèéóùúûüýþÿ',
    102152
     153
    103154    10 => 'áãéïôõùúûüýþÿ',
    104155
     156
    105157    11 => 'éðöúý',
    106158
     159
    107160    12 => 'äæçéú',
    108161
     162
    109163    13 => 'éìïú',
    110164
     165
    111166    14 => 'úûü',
    112167
     168
    113169    15 => 'áâãäæçéõùúýþ',
    114170
     171
    115172    16 => 'éúý',
    116173
     174
    117175    17 => 'é',
    118176
     177
    119178    18 => 'æé',
    120179
     180
    121181    19 => 'úûü',
    122182
     183
    123184    20 => 'áâãäæçéêïõöøùúüýþÿ',
    124185
     186
    125187    21 => 'áæçéôõö÷ùúûüþÿ',
    126188
     189
    127190    22 => 'áãäæçéëíïðñòôõö÷øùúüýþÿ',
    128191
     192
    129193    23 => 'áãäæçéïñôõö÷ùúûýþÿ',
    130194
     195
    131196    24 => 'áãäæçéôõøùúûýÿ',
    132197
     198
    133199    25 => 'áâãäæçéêëìïñòôõö÷øùúûýþÿ',
    134200
     201
    135202    26 => 'àáâãäæçèéêëìíîïðñòóôõö÷øùúûüý',
    136203
     204
    137205    27 => 'àîôúûüýþ',
    138206
     207
    139208    28 => 'àéëðóõúûüý',
    140209
     210
    141211    29 => 'àáåæèîóö÷øùúûüýþ',
    142212
     213
    143214    30 => 'èîóôúûüýÿ',
    144215
     216
    145217    31 => 'àîóôúûüý'
    146218
     219
    147220    );
    148221
     222
    149223  $b=array(
    150224
     225
    151226    0  => 'àààáàâàãàäàåàæàçàèàéàêàëàíàîàñàòàóàôàõàöà÷àøàùàýàþàÿáãáìáòáõáöá÷áøáùáúáüáþáÿâáâæâõâúâþãçãêãòã÷ãÿäääõäýåàåáåãåååæåèåîåïåñåóåôåöåùåýåþåÿæáæâæëæïæðæöæ÷æþçççñçòçøçýçþèàèåèæèèèéèîèïèóèôèöèøèùèýèþèÿéïéðêçêìê÷êøëáëâëçëíëøëùìâìãìõì÷ìýìþíáíâíýîàîâîãîåîæîçîèîéîêîëîìîîîïîóîôîõîöîøîùîýîþîÿïìïöðçñãñäñæñçñúñýòáòãòäòçòïòøòùòúòýóàóáóâóæóèóéóîóóóôóõóöóùóþóÿôëôìõãõäõêõïõñõøõýöâöìöóöû÷â÷ì÷ð÷øøðøñø÷ùíùðùüýâýãýäýçýéýêýìýíýïýòýôýõýÿþàþáþâþãþäþåþæþçþéþëþìþíþïþðþõþöþøþþÿáÿãÿäÿåÿæÿçÿèÿéÿïÿðÿøÿùÿþÿÿ',
    152227
     228
    153229    1  => 'àààæàîàïàôàùàýáàáááâáãáäáæáçáêáëáìáíáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãàãáãâãããäãåãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäâäãäääæäçäêäëäìäíäîäïäðäñäòäõäöä÷äøäúäûäüäýäþåàåáåïåóåôåýåÿæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçâçãçäçåçæçççèçêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿèàèýêâêäêæêçêêêëêìêíêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîîîôîõðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùñáñâñãñäñæñçñìñíñïñðñññôñõñ÷ñøñùñúñûñüñýñþòàòáòâòãòäòçòèòêòëòìòíòïòðòñòòòóòôòõòöò÷òøòùòúòûòüòýòþóîóóóöóùóýõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöìöó÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùîùðùüúþûáûãûæûèûïûðûóûöûøûÿüáüâüãüäüæüçüêüìüíüîüïüñüòüôüöü÷üøüùþàþáþâþãþåþæþçþéþêþìþíþïþõþöþ÷þøþùþþÿáÿâÿãÿäÿåÿæÿèÿéÿêÿíÿðÿñÿõÿöÿ÷ÿøÿþÿÿ',
    154230
     231
    155232    2  => 'àààîàóàôàùàýáàáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâòâóâõâöâ÷âøâùâúâüâþãàãáãâãããäãåãçãèãêãìãíãñãòã÷ãøãÿäáäãäääæäçäêäëäìäíäïäñäòäõäöä÷äøäúäüäýäþäÿåàåèåóåôåýæàæáæâæãæäæåæææêæëæìæíæîæïæðæñæóæöæ÷æüæþçåçæçççêçñçòçóçöç÷çøçüçýçþèóèôèýêâêäêæêçêêêìêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëûìáìâìãìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîôîýïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñáñâñãñäñæñçñèñíñðñññôñöñ÷ñøñùñúñüñýòáòâòãòäòçòêòëòìòíòïòñòòòóòôòõòöò÷òøòùòúòüòýòþóáóâóæóèóîóïóóóôóöóýõàõâõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøòøöø÷øüøþùàùåùíùîùðùóùüúþúÿûùüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþñþòþõþöþ÷þøþùþþÿáÿâÿãÿäÿåÿèÿéÿïÿðÿöÿ÷ÿøÿþÿÿ',
    156233
     234
    157235    3  => 'àààêàîàôàøàýáááâáãáäáæáçáèáêáëáìáíáîáðáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãçãêãëãìãíãîãðãñãòãóã÷ãøãÿäáäâäãäääæäçäèäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåàåâåãåæåçåïåóåõåöå÷åøåùåýçáçâçãçäçåçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿèæèóèôèöèùèýêâêäêåêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìèìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíûíüíýîþðáðâðãðäðæðçðêðëðìðïðððñðòðôðõðöð÷ðøðùðüñàñáñâñãñäñåñæñçñèñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþòàòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòûòüòýóâóãóçóèóéóêóîóïóóóôóöóýóÿ÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøêøëøìøíøîøïøðøñøóøöø÷øüøþÿáÿâÿãÿåÿæÿçÿèÿéÿêÿëÿíÿïÿðÿñÿòÿõÿöÿ÷ÿøÿùÿþÿÿ',
    158236
     237
    159238    4  => 'àààçàóàùàýáááâáãáäáæáçáêáëáìáíáñáòáóáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿãáãâãããäãåãçãêãìãíãñãòãóã÷ãøãÿäáäãäääæäçäêäëäìäíäïäðäñäòäõäöä÷äøäúäûäüäýäþäÿåóåõåùåýæáæâæãæäæææêæëæìæíæïæðæñæöæ÷æüæþçáçâçãçäçæçççêçëçìçðçñçòçöç÷çøçúçûçüçþçÿèãèõèýêâêäêæêçêêêìêíêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüëþìáìâìãìêìëìììïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíëíííðíñíôíõíöí÷íøíùíüíýîàîôîýîþîÿïåïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððòðôðõðöð÷ðøðùðüñáñãñäñæñçñíñðñññôñõñöñøñùñúñûñüñýñþñÿòáòãòäòçòêòëòìòíòïòñòòòóòôòõòöò÷òøòùòúòûòüòýòþóäóçóôõãõäõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøâøêøëøìøíøîøïøðøñøöø÷øüøþûçûèûóûöûÿüâüãüäüæüçüíüîüïüñüôüöü÷üøüùýãýäýçýéýëýìýïýñýòýôýõýÿþàþáþâþãþäþåþëþìþñþòþõþöþ÷þùþþÿáÿâÿåÿæÿçÿêÿëÿïÿðÿöÿøÿþÿÿ',
    160239
     240
    161241    5  => 'àààåàæàçàèàéàîàïàðàñàóàôàõàöà÷àøàùàýàþàÿáááâáãáäáæáçáõáöá÷áøáùáúâáâââãâæâïâõâùâúâþãáãâãããçãòãøäãäõäöäþåàåáåãåäåååæåèåëåíåîåóåôåùåýåþåÿæáæâæææìæ÷æþçñçöçøçúçýèàèáèäèåèæèèèéèîèðèóèôèöè÷èøèùèýèþèÿéâéîéõêæêçêêêìê÷ëäëæëçëïëôëõëøëùìâìðìôìõìøìýìþíæíëíôíýîàîåîèîéîóî÷îøîþîÿïìïïïôðùñãñæñçñùñúñýñþòãòäòçòïòôòöòùòúòýòþóàóèóéóîóóóôóöóøóùóýôìôíôñô÷ôûõãõêõðõòõøöâöìöó÷â÷ì÷ð÷øøâøìøïøðøöø÷øþùíùîýâýãýäýçýéýëýìýíýïýðýñýõýÿþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿãÿåÿæÿçÿèÿéÿêÿïÿöÿ÷ÿøÿùÿþÿÿ',
    162242
     243
    163244    6  => 'àààáàçàèàîàïàóàôàöàøàýáááâáãáäáæáçáêáëáìáíáðáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâåâæâçâèâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãêãìãíãîãðãñãòã÷ãøãÿäáäâäãäääæäçäêäìäíäïäðäñäòäõäöä÷äøäúäýåàåæåèåîåóåõåýåþåÿæáæâæãæäæææêæëæìæíæîæïæðæñæóæöæ÷æüæþèàèáèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëåëæëçëêëëëìëíëîëïëñëòëóëôëõë÷ëøëùëûëüëþëÿìàìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîáîâîäîæîèîëîîîïîòîóîôîõîöîùîýîþîÿïàïåïèïêïìïíïîïïïðïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿóáóâóãóäóçóìóîóïóóóôóöóøóýöâöåöèöêöìöî÷à÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþìþíþïþñþòþõþöþ÷þøþùþþ',
    164245
     246
    165247    7  => 'àýáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâìâïâñâòâõâöâ÷âøâùâúâüâþãáãâãããäãçãêãìãñãòã÷ãøãÿäáäãäääæäçäëäìäïäñäòäõäöä÷äøäúäýäþåàåãåäåæåçåîåïåñåóåõå÷åùåýæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçãçäçåçæçççèçêçëçìçîçñçòçóçöç÷çøçúçûçüçýçþçÿèáèçèïèôèõèùèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìêìëìììðìñìòìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíýîàîæîèîóîôîöîýîþîÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòàòáòâòãòäòåòçòêòëòìòíòïòðòñòòòóòôòõòöò÷òøòùòúòûòýòþòÿóâóãóæóîóóóôóöóøóýöâöåöèöêöì÷à÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøåøêøëøìøíøîøïøðøñøòøóøöø÷øüøþûäûæûèûëûïûòûóûøûÿüâüãüäüæüçüèüêüíüîüïüñüôüöü÷üøüùýâýãýäýçýéýêýëýìýïýðýñýòýôýõýÿþàþáþâþãþäþåþæþçþéþêþëþíþïþðþñþòþõþöþ÷þøþùþþÿãÿäÿæÿçÿêÿïÿðÿñÿõÿöÿøÿþÿÿ',
    166248
     249
    167250    8  => 'àààåàæàèàéàîàóàõà÷àùàýàþáâáãáæáçáìáòáõáöá÷áùáúáÿâáâââãâäâæâçâìâïâòâùâúâþãáãâãããêãñã÷ãÿäáäãäääëäïäõä÷äøäúäüäýåàåáåååæåèåêåîåïåóåôå÷åøåùåýåþåÿæáæâæãæææëæìæïæðæöæ÷æüæþçççòçöçüçýçþèàèáèâèãèäèåèæèçèèèéèêèëèíèîèïèòèóèôèõèöè÷èøèùèýèþèÿéâéãéäéåéçéêéëéìéîéðéôéõé÷éøêäêæêçëáëãëæëçëìëíëïëòëôëõë÷ëøëùìðìòìõìøìùìüìýìþíëíðíøíùíýîåîæîèîéîîîóîôîöî÷îøîùîþîÿïìïôïöï÷ïüðãðçðôðõðöðùðüñáñãñæñçñðñôñùñúñýòáòãòäòçòïòôòõòøòùòúòþóàóáóâóåóæóçóèóéóîóðóóóôóõóöóøóùóýóþóÿôëôíô÷õãõäõêõìõòõøõýöâöì÷â÷ë÷ì÷ð÷øøâøïøðøñøòøöø÷øþùîùüýâýãýäýçýéýêýëýìýíýïýðýñýôýõýÿþàþáþâþãþäþåþæþçþéþêþìþðþñþõþöþ÷þøþþÿáÿãÿäÿèÿéÿêÿðÿñÿöÿ÷ÿøÿù',
    168251
     252
    169253    9  => 'âáâââãâäâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãèãêãëãìãíãîãðãñãòãóã÷ãøãÿäáäâäãäääçäêäëäìäíäïäðäñäõäöä÷äøäúäûäüäýäþåàåáåâåãåäåååæåçåèåéåêåìåîåïåñåòåóåôåõåöå÷åøåùåýåþåÿçáçâçãçäçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿêâêäêæêçêêêìêíêðêòêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùëüëþëÿìáìâìãìêìììíìïìðìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íùíüíýîàîáîåîæîèîéîëîìîîîïîñîóîôîõîöî÷îøîùîýîþîÿïàïèïêïëïìïíïîïïïðïñïòïóïöï÷ïøïûïüïÿðàðáðâðãðäðåðæðçðèðêðëðìðíðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿñâñãñäñåñæñçñëñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþòáòâòãòäòçòêòëòìòíòïòòòôòõòöò÷òøòùòúòûòüòýòþòÿôëôìôíôðôñôòôôô÷ôûõâõãõäõåõèõêõëõìõíõîõïõðõñõòõóõøõýöâöèöêöì÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøöø÷øüøþ',
    170254
     255
    171256    10 => 'àààùàýâáâââãâäâæâçâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿäàäáäâäãäääåäæäçäèäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåáåãåæåèåîåóåôåõåöå÷åøåùåýåþåÿæàæáæâæãæäæææèæêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçâçãçäçæçççêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿèãèæèöèùèýèþêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìèìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàîöðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðùðüñáñäñæñçñëñìñðñññõñ÷ñùñúñüñýñþòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþóàóãóæóéóîóôóöóýöàöâöêöìöîöóöû÷à÷â÷è÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøâøêøëøìøíøîøïøðøñøòøöø÷øüøþ',
    172257
     258
    173259    11 => 'àààîàôàýáááâáãáäáæáçáêáëáìáñáòáõá÷áøáùáúáüáþáÿâáâââãâäâæâçâìâïâðâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãçãêãëãìãíãñãòã÷ãøãÿäáäâäãäääæäçäêäëäìäïäðäòäõäöä÷äøäúäüäýäÿåàæáæâæãæäæææêæëæìæîæïæðæñæóæöæ÷æüæþçáçâçãçäçæçççèçìçîçðçñçöç÷çøçúçûçüçýçþçÿèóèýêäêæêçêêêìêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõí÷íøíùíüíýíþîýîþïêïëïìïíïïïðïñïòïôïöï÷ïøïüñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñûñüñýñþòáòâòãòäòçòèòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþòÿóùôèôëôìôíôîôðôñôòôóôôô÷ôûõàõãõäõåõêõëõìõíõïõðõñõòõóõøõý÷â÷ë÷ì÷ð÷ò÷øøàøâøèøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùíùîùðùóùüûãûäûçûèûðûóûöûÿþàþãþåþéÿáÿè',
    174260
     261
    175262    12 => 'àààáàîàïàóàùáááâáãáäáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãåãçãèãêãìãîãðãñãòãóã÷ãøãÿåàåïåóåýèàèáèæèùèýêâêäêæêçêêêëêìêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëîëïëñëòëóëôëõë÷ëøëùëûëüìáìâìãìêìëìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàïêïìïíïïïñïôïöï÷ïÿðáðâðãðäðæðçðêðëðìðíðîðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñûñýñþòàòáòâòãòäòçòêòëòìòíòîòïòðòñòòòóòôòõòöò÷òøòùòúòûòüòýòþòÿóáóâóåóèóéóîóóóöóýóÿôëôìôíôðôñôòôôô÷ôûõàõâõãõäõåõèõêõëõìõíõïõðõñõòõóõøõýöâöèöêöìöî÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøàøâøêøëøìøíøîøïøðøñøòøóøöø÷øüøþùàùíùîùðùóùüûáûäûæûçûèûïûðûóûöûùûÿüáüâüãüæüçüêüìüíüîüïüôüöü÷üøüùýâýãýäýçýéýêýëýìýïýñýòýôýõýÿþàþáþâþãþäþåþæþçþéþêþìþïþðþñþòþõþöþ÷þøþùþþÿáÿäÿåÿæÿçÿéÿïÿðÿõÿöÿþÿÿ',
    176263
     264
    177265    13 => 'àààôàýáááâáãáäáæáçáèáêáëáìáíáîáðáñáòáõáöá÷áøáùáúáûáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâûâüâþâÿãáãããçãêãìãíã÷ãøãÿäáäâäãäääçäêäïä÷äúäüäýäÿåùæáæâæãæäæææêæëæìæíæîæïæðæñæöæ÷æüæþçáçâçãçäçæçççêçëçìçíçðçñçòçöç÷çøçúçüçýçþçÿèóèýêäêæêçêêêìêñê÷êøëàëáëâëãëäëåëæëçëêëëëìëíëîëïëñëòëóëôëõë÷ëøëùëûëüëþëÿíáíâíãíäíæíçíêíëíííðíñíôíõíöí÷íøíùíüíýîùðáðâðãðäðæðçðêðëðìðíðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿñãñäñæñçñðñõñ÷ñøñùñúñüñýñþñÿòáòâòäòçòìòïòòòôòõòöò÷òøòùòúòüòýóáóãóçóèóîóïóóóôóõóöóýôìôíôñôòôôô÷ôûõàõâõãõäõèõêõëõìõíõïõñõòõóõøõýöâöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøåøêøëøìøíøîøïøðøñøóøöø÷øüøþùàùåùíùîùðùóùüûáûãûäûæûçûèûêûñûóûöûùûÿüáüâüäüçüìüíüïüôüöü÷üùýâýãýäýçýéýêýëýìýíýðýñýòýôýõýÿþáþâþãþåþæþçþéþêþëþìþíþðþöÿáÿäÿïÿðÿö',
    178266
     267
    179268    14 => 'àààáàâàãàäàåàæàèàéàëàìàîàóàôàõàöà÷àøàùàýàþàÿáöáþâäâæâõâúâþãâãããçãêãñã÷ãøãÿäýäþåàåáåååèåðåóåôåùåýåÿæáæâæëæïæðæñæ÷æþçñçòçöç÷çøçúçýçþèàèáèåèæèèèéèîèïèóèôèýèþèÿéâéãéåéçéïéðéôéõéøêäêæêìêöê÷ëôìâìãìõìøìùìýìþíõíøíýîàîâîãîåîæîçîèîéîëîìîóîôîøîýîþîÿïìïôïøñãñçñùñýòýòþóàóåóæóèóéóîóðóóóôóöóøóùóþóÿôìôíôòô÷õãõäõêõïõñõýöóöû÷ì÷ð÷øøðøñøöø÷ùîýäýéýïýñýõýÿþàþáþâþãþæþéþêþëþìþíþïþðþõþöþ÷þøÿãÿåÿèÿïÿöÿ÷ÿøÿþÿÿ',
    180269
     270
    181271    15 => 'àààîàýåàåáåèåìåóåôåýåÿèáèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìàìáìâìãìåìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàïìïïïðïñïòïôïöï÷ïøïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþñáñâñãñäñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþòÿóâóåóæóèóéóìóîóóóôóöóýóÿôåôëôìôíôîôñôòôóôôô÷ôûöàöâöåöêöìöî÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üøàøâøêøëøìøíøîøïøðøñøòøöø÷øüøþûáûäûçûèûêûíûïûñûóûöû÷ûÿüáüâüãüäüæüçüèüêüìüíüîüïüñüòüôüöü÷üøüùÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿìÿíÿïÿðÿöÿ÷ÿøÿþÿÿ',
    182272
     273
    183274    16 => 'àýáááâáãáäáæáçáêáìáòáõáöá÷áøáùáúáûáüáÿâáâââãâäâæâçâêâëâìâïâðâñâòâõâöâ÷âøâùâúãáãâãããäãçãêãìãòã÷ãÿäáäâäãäääçäêäëäïäðäòäõä÷äøäúäüäýåýæáæâæãæææëæìæîæïæðæñæ÷æüæþçáçâçãçäçæçççìçðçñçòçóçöç÷çøçúçûçüçýçþçÿèýêäêæêçêêêìêðêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùëþìáìâìãìêìììíìïìðìñìòìôìõìöìøìùìüìýìþíâíãíäíæíçíêíëíííðíòíôíõíöí÷íøíùíüíýïêïìïïïñïòïôïöï÷ïøïüðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñáñâñãñäñæñçñëñìñíñðñññôñõñöñ÷ñøñùñúñüñýñþòáòãòäòïòòòõòöò÷òøòùòúòýòþóâóîóóóöóýôëôìôðôñôòôóôôô÷ôûõâõãõëõðõòõøöâöêöì÷â÷ê÷ì÷í÷î÷ð÷ò÷ø÷üøâøëøìøïøñøòøöø÷øüøþùàùíùîùðùóùüûèûðûóûÿüâüäüæüçüíüîüïüôüöü÷üøüùþàþáþâþäþåþæþéþïþðþöþþÿèÿðÿö',
    184275
     276
    185277    17 => 'àààçàèàîàùáááâáãáäáæáçáêáìáíáñáòáóáõáöá÷áøáùáúáüáÿâáâââãâäâæâçâêâëâìâíâïâñâòâõâöâ÷âøâùâúâüâþãàãáãâãããäãçãêãìãñãòã÷ãøãÿäáäãäääæäçäêäëäìäíäïäñäòäõäöä÷äøäúäûäüäýäþäÿåæåôåýæáæâæãæäæææêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçâçãçäçåçæçççèçêçëçìçíçîçðçñçòçóçöç÷çøçúçûçüçýçþçÿèóèùèýêäêæêçêêêìêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìòìôìõìöì÷ìøìùìüìýìþíáíâíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîýîÿïêïìïíïïïñïòïôïöï÷ïøïüðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþðÿñáñãñäñæñçñññôñõñöñøñùñúñüñýñþòäòçòïòòòôòõòøòùòúóóóöôëôìôíôðôñôòôóôôô÷ôûõãõäõêõìõíõïõñõòõøõýöêöìöóöû÷â÷ê÷ì÷í÷î÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøöø÷øüøþùàùèùíùîùðùóùüúþûáûäûæûçûèûêûóûöû÷ûøûÿüâüãüäüæüçüèüíüîüïüñüôüöü÷üøüùüÿýâýãýäýçýéýëýïýñýòýôýõýÿþàþáþâþãþåþçþéþìþíþïþòþõþöþ÷þùþþÿáÿâÿèÿéÿëÿïÿðÿøÿþÿÿ',
    186278
     279
    187280    18 => 'àààîàýáááâáãáäáåáæáçáêáìáíáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâêâìâíâïâñâòâõâöâ÷âøâùâúâüâþãáãâãããäãçãèãêãëãìãíãñãòãóã÷ãøãÿäáäâäãäääæäçäêäëäìäíäïäðäñäòäóäõäöä÷äøäúäüäýäþäÿåóåýçáçãçäçåçæçççèçêçëçìçíçðçñçòçóçöç÷çøçúçüçýçþçÿêâêäêæêçêêêìêòêöê÷êøëáëâëãëäëæëêëëëìëíëïëñëòëôëõë÷ëøëùìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýïêïìïíïïïñïòïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðñðòðôðõðöð÷ðøðùñáñãñäñæñçñïñññôñõñöñøñùñúñüñýòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòûòüòýòþóâóóôàôëôìôíôðôñôòôôô÷ôûõãõäõåõêõìõíõïõðõñõòõøõýöâöèöêöì÷â÷ê÷ë÷ì÷í÷î÷ð÷ò÷ø÷üøêøìøíøîøïøðøñøöø÷øüøþùíùîùðùóùüúþúÿûáûæûçûèûòûóûöûÿüâüãüæüçüíüîüïüöü÷üøüùýâýãýäýçýéýëýìýïýðýñýòýôýõýÿþáþâþãþäþåþæþçþéþíþïþñþòþõþöþ÷þùþþÿäÿåÿèÿëÿðÿ÷ÿþ',
    188281
     282
    189283    19 => 'àààáàâàãàåàæàèàêàìàîàïàóàôàõà÷àøàùàýàþàÿáâáãáäáçáìáòáõáøáùáþâáâââãâäâæâçâìâïâðâòâóâõâöâ÷âùâúâþãáãâãäãçãêãìãñãòã÷ãøãÿäáäãäïäõäöä÷äúäýåàåáåãåååæåèåêåëåíåîåïåóåôåöå÷åùåýåþåÿæâæãæìæïæðæöæþçáçãçæçççòçöçøçúçýçþçÿèàèáèâèãèåèæèèèéèìèîèïèóèôèõè÷èøèùèýèþèÿéãéåéçéëéîéïéðéôéõéöéøêäêæêçê÷êøëáëãëæëçëìëíëïëòëõë÷ëøëùìâìãìïìòìõìøìùìýìþíáíâíæíçíëíðíôíõí÷íùíýíþíÿîàîâîãîåîæîèîéîëîìîíîîîïîóîôîõîöî÷îøîùîýîþîÿïìïñïòïôïøðçðôðõðùñáñãñäñæñçñôñõñöñ÷ñøñùñúñýñþòãòäòçòìòïòôòõòöòøòùòúòýóàóáóâóãóäóåóæóçóèóéóêóíóîóïóðóñóòóóóôóõóöó÷óøóùóýóþóÿôàôìôíôîôðôñôòô÷ôûõäõðõýöàöâöìöîöóöû÷âøâøìøïøðøñøòøöøþùðùüýâýãýäýçýéýêýìýïýôýõýÿþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿãÿäÿåÿæÿèÿéÿêÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ',
    190284
     285
    191286    20 => 'àààäàåàæàèàîàïàôàöà÷àùàýàþàÿåàåáåãåæåçåïåóåôåöå÷åùåýåþèâèæèóèôèõèùèýëáëâëãëäëæëçëêëëëìëíëñëòëôëõë÷ëøëùëûëüìáìâìãìèìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíàíáíâíãíäíåíæíçíèíêíëíííîíðíñíòíóíôíõíöí÷íøíùíüíýíþíÿîàîåîæîçîèîîîïîóîôîõîöî÷îøîùîýîþîÿðáðâðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðüðþðÿñàñáñâñãñäñæñçñèñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòýòþóàóáóâóäóåóæóèóéóêóëóìóîóïóñóóóôóõó÷óøóùóýóÿôëôìôíôðôñôòôôô÷ôû÷à÷â÷å÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üûáûãûäûåûæûçûèûéûêûëûìûíûïûñûòûóûõûöû÷ûøûùûÿ',
    192287
     288
    193289    21 => 'àààãàçàôàöà÷àøàùâáâââãâäâåâæâçâèâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãáãâãããäãåãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäàäáäâäãäääåäæäçäèäêäëäìäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿåàåáåãåäåååæåçåèåêåëåïåñåòåóåôåõåöå÷åùåýåþåÿèïèóèôèöèøèýêàêâêäêåêæêçêèêêêëêìêíêñêòêóêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëôëõë÷ëøëùëüìáìâìãìêìëìíìïìðìñìòìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíûíüíýîèîîîöîøîýîþîÿïåïèïêïëïìïíïïïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðêðëðìðíðïðððñðòðôðõðöð÷ðøðùðûðÿñàñáñâñãñäñæñçñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñûñüñýñþòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþóáóâóãóçóèóéóìóíóîóñóóóôóõóöó÷óùóýóÿøàøâøêøëøìøíøïøðøñøòøóøöø÷øüøþýâýãýäýçýéýíýðýñýôýõýÿ',
    194290
     291
    195292    22 => 'àààáàâàãàäàæàçàèàéàêàîàñàóàôàöà÷àøàùàýâàâáâââãâäâæâçâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâûâüâþâÿåàåáåæåèåôåöå÷åøåùåýåÿèáèãèæèóèõèöè÷èøèùèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøìáìâìãìåìèìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìûìüìýìþìÿîàîáîäîåîæîçîèîëîíîîîïîñîòîóîôîõîöî÷îøîùîýîþîÿóàóáóâóãóäóåóèóêóëóìóîóïóðóñóòóóóôóõóöó÷óøóùóýóÿûáûâûäûæûçûèûêûëûíûðûñûòûóûõûöû÷ûøûùûÿ',
    196293
     294
    197295    23 => 'àààáàçàîàïàóàôàöà÷àýâáâââãâäâæâçâèâêâëâìâíâïâðâñâòâõâöâ÷âøâùâúâüâþâÿåàåæåîåóåôåöåùåþèáèäèæèçèîèïèóèôèýêâêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëûëüëþëÿìáìâìãìåìèìêìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþîàîáîâîãîäîåîæîçîèîëîîîðîñîòîóîôîõîöîøîùîýîþîÿðàðáðâðãðäðæðçðèðêðëðìðíðîðïðððñðòðóðôðõðöð÷ðøðùðûðüðþðÿòáòâòãòäòçòêòëòìòíòïòðòñòòòôòõòöò÷òøòùòúòüòýòþóàóåóçóèóéóêóîóóóôóöó÷óýøâøêøëøìøíøîøïøðøñøòøöø÷øüøþüáüâüãüäüæüçüêüìüíüîüïüôüöü÷üøüù',
    198296
     297
    199298    24 => 'àààçàèàîàóàöàýâáâââãâäâæâçâêâëâìâíâîâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿåàåæåîåöåùåýèàèãèäèæèçèèèîèóèöè÷èýêäêæêçêêêëêìêíêðêñêòêöê÷êøëáëâëãëäëæëçëêëëëìëíëïëñëòëóëôëõë÷ëøëùëüìáìâìãìåìêìëìììíìîìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíôíõíöí÷íøíùíüíýîàîäîæîçîèîîîõîöî÷îøîùîýîþîÿïåïêïëïìïíïïïñïòïóïôïöï÷ïøïûïüïÿðàðáðâðãðäðåðæðçðêðëðìðíðîðïðððñðòðôðõðöð÷ðøðùðûðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññòñóñôñõñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòêòëòìòíòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿóâóãóäóæóçóèóêóíóîóïóóóôóõóöóýóÿöàöâöèöêöìöîöó÷â÷å÷è÷ê÷ë÷ì÷í÷î÷ð÷ò÷ó÷ø÷üüáüâüãüäüåüæüçüêüìüíüîüïüôüöü÷üøüùþàþáþâþãþäþåþæþçþéþêþëþìþíþïþñþõþöþ÷þøþùþþ',
    200299
     300
    201301    25 => 'àààáàæàçàèàîàïàðàóàôàöà÷àøàùàýåàåçåóåõåöåùåýåþåÿèàèáèãèäèæèçèèèîèðèñèóèôèýèþèÿíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýíþíÿîàîâîäîåîæîçîèîéîêîëîíîîîïîðîñîòîóîôîõîöî÷îøîùîýîþîÿðàðáðâðãðäðæðçðêðëðìðíðîðïðððñðòðóðôðõðöð÷ðøðùðûðüðþóàóáóâóãóäóåóæóçóèóéóêóëóìóîóóóôóõóöó÷óøóýóÿüáüâüãüäüåüæüçüèüêüìüíüîüïüñüòüôüöü÷üøüùüÿ',
    202302
     303
    203304    26 => 'åàåáåâåãåååèåéåíåîåïåòåóåôåöå÷åùåýåþåÿþàþáþâþãþäþåþæþçþéþêþëþìþïþðþñþõþöþ÷þøþùþþÿáÿãÿäÿåÿæÿèÿéÿêÿìÿïÿõÿöÿ÷ÿøÿùÿþÿÿ',
    204305
     306
    205307    27 => 'áááâáãáäáæáçáìáñáòáõáöá÷áøáùáúáþáÿâáâââãâäâæâçâëâìâïâðâñâòâõâöâùâúâüâþâÿãáãâãããäãåãçãêãìãñãòãóã÷ãøäáäãäääæäçäêäìäïäñäòäõäöä÷äøäúäûäüäýäþäÿåàåáåâåãåååæåèåéåêåëåíåîåïåðåñåòåóåôåöå÷åøåùåýåþåÿæáæâæëæìæïæðæñæóæöæ÷æüæþçáçäçæçççèçêçìçðçñçöç÷çøçúçüçýçþçÿèàèáèâèäèåèæèçèèèéèêèëèìèíèîèïèðèòèóèôèõèöè÷èøèùèýèþèÿéâéãéåéçéêéëéìéíéîéðéñéôéõéöé÷éøêäêæêçêêêìêñêòêöê÷ëáëâëãëæëçëëëìëíëïëòëôëõë÷ëøëùëþìâìãìëìììíìðìòìôìõìöìøìùìüìýìþíáíâíãíäíæíçíëíðíòíôíõíöíøíùíýïìïïïñïòïôïöïøïûðáðãðäðæðçðëðìðïðððñðòðôðõðöð÷ðùñáñãñäñæñçñíñðñññôñöñùñúñýñþòáòãòäòçòìòïòòòôòõòöò÷òøòùòúòýòþóàóáóâóãóåóçóèóéóêóëóìóíóîóïóðóñóòóóóôóõóöóøóùóýóþóÿõãõäõêõìõïõðõñõóõøõýöèöêöìöîöóöû÷â÷ì÷ð÷ò÷ø÷üøìøïøðøñøòø÷øþùàùíùîùðùüÿáÿãÿäÿåÿæÿçÿèÿéÿêÿëÿìÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ',
    206308
     309
    207310    28 => 'áááâáãáäáæáçáêáëáìáíáðáñáòáõáöá÷áøáùáúáüáþáÿâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãáãâãããäãçãêãëãìãíãðãñãòã÷ãøãÿäáäâäãäääæäçäèäêäëäìäíäïäðäòäóäõäöä÷äúäûäüäýäþäÿåàåáåååæåèåëåíåîåóåõåöå÷åùåýåþåÿæáæâæãæäæææèæêæëæìæíæîæïæðæñæóæöæ÷æüæþçáçãçäçæçççëçìçðçñçòçöç÷çøçúçýçþèàèáèâèãèäèåèæèçèèèéèêèëèíèîèïèñèòèóèôè÷èùèýèþèÿêâêäêæêçêêêìêðêòêöê÷êøìáìâìãìêìëìììíìïìðìñìòìôìõìöì÷ìøìùìüìýìþíáíâíãíäíæíçíêíëíííðíñíòíôíõíöí÷íøíùíüíýîàîáîâîãîäîåîæîçîèîéîêîëîìîîîïîñîóîôîõîöî÷îøîùîýîþîÿïêïëïìïíïîïïïðïñïóïôïöï÷ïøïûïüïÿñâñãñäñåñæñçñëñìñíñïñðñññôñõñöñ÷ñøñùñúñüñýñþòáòâòãòäòçòêòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿôåôëôìôíôñôòôôô÷öâöêöì÷â÷ê÷ë÷ì÷í÷ð÷ò÷ø÷üøâøêøëøìøíøïøðøñøòøöø÷øüøþùíùîùðùüþàþáþâþãþäþåþæþéþëþìþíþïþðþõþöþ÷þøþþÿáÿäÿåÿæÿçÿèÿéÿëÿïÿñÿòÿöÿ÷ÿøÿùÿÿ',
    208311
     312
    209313    29 => 'âáâââãâäâæâçâêâëâíâïâñâòâóâõâöâ÷âøâùâúâûâüâþâÿãàãáãâãããäãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäæäçäêäëäíäîäïäðäñäòäóäõäöä÷äøäúäûäüäýäþäÿçàçáçâçãçäçæçççêçëçìçíçðçñçòçóçöç÷çøçúçûçüçýçþçÿéâéãéäéåéçéêéìéîéïéðéòéõéöé÷éøêäêåêæêêêëêìêíêòêöê÷êøëáëâëãëäëæëçëêëíëîëïëñëòëôëõë÷ëøëùëûëþëÿìâìãìêìëìíìðìñìòìôìõìöì÷ìøìùìûìüìýìþìÿíàíáíæíçíêíëíðíóíôíõí÷íøíùíûíüíýíþíÿïàïåïêïëïìïíïðïñïòïóïôïöï÷ïøïûïüïÿðáðãðäðæðêðìðïðððôðõðöð÷ðøðùðüðþðÿñàñáñâñãñäñåñæñçñèñëñìñíñîñïñðñññóñôñöñ÷ñøñùñúñûñüñýñþñÿòáòâòãòäòçòëòìòïòñòòòôòõòöò÷òøòùòúòüòýòþòÿôàôëôìôíôîôðôñôòôóô÷ôûõâõãõäõåõèõêõëõìõïõðõñõòõóõøõýÿáÿâÿãÿäÿåÿæÿçÿèÿéÿëÿìÿíÿïÿðÿñÿòÿõÿöÿ÷ÿøÿùÿþÿÿ',
    210314
     315
    211316    30 => 'àààáàâàãàäàåàæàçàèàéàêàëàìàîàïàñàòàóàôàõàöà÷àøàùàýàþàÿáááãáäáæáçáìáðáñáòáõáöá÷áøáùáúáüáþâàâáâââãâäâæâçâêâëâìâíâïâðâñâòâóâõâöâ÷âøâùâúâüâþâÿãáãâãããäãçãèãêãëãìãíãðãñãòãóã÷ãøãÿäáäâäãäääçäêäëäìäïäðäòäõä÷äøäúäûäýäþåàåáåâåãåäåååæåçåèåéåêåëåíåîåïåðåñåóåôåõåöå÷åøåùåýåþåÿæáæâæãæäæææêæëæìæîæïæðæñæóæöæ÷æüæþçáçâçäçççêçëçìçðçñçòçöç÷çøçúçüçýçþçÿéâéãéäéåéçéêéëéíéîéïéðéñéòéôéõéöé÷éøêäêæêçêêêëêìêðêòêöê÷êøëàëáëâëãëäëæëçëêëìëíëîëïëñëòëóëôëõë÷ëøëùëûìáìâìãìëìììíìïìðìñìòìóìôìõìöì÷ìøìùìüìýìþìÿíáíâíäíæíçíëíííðíñíòíôí÷íøíùíýíþïàïëïìïíïîïïïðïñïòïóïôïöï÷ïøïûïüïÿðáðâðãðäðæðçðëðìðððñðòðôðõðöð÷ðøðùðþñáñâñãñäñæñçñëñìñíñïñðñññóñôñõñöñ÷ñøñùñúñýòáòâòãòäòçòëòìòïòðòòòôòõòöò÷òøòùòúòüòýòþòÿõâõãõäõêõëõìõïõðõñõòõøõýöàöâöåöêöìöîöóöû÷â÷ë÷ì÷ð÷ò÷øøâøåøèøëøìøîøïøðøñøòøöø÷øüøþùíùîùðùüþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþñþõþöþ÷þøþùþþ',
    212317
     318
    213319    31 => 'áááâáãáäáåáæáçáêáìáíáñáòáóáõáöá÷áøáùáúáûáþáÿâáâââãâäâæâçâìâïâðâòâõâöâ÷âùâúâþãáãâãããäãçãìãðãòãøãÿäáäâäãäääæäçäëäìäïäñäòäõäöäøäúäýåàåáåãåååæåçåèåéåëåíåîåïåðåñåóåôåõåöå÷åùåýåþåÿæâæãæäæææëæìæîæïæðæñæöæ÷æüæþçáçäçæçççìçðçñçòçöçøçúçýçþèàèáèâèãèäèåèæèèèéèêèëèìèîèïèðèñèòèóèôèõèøèùèýèþèÿéâéãéäéåéçéëéìéíéîéïéðéôéõé÷éøêâêäêæêçêêêìêðêòêöê÷ëáëâëãëäëåëæëçëëëìëíëïëôëõë÷ëøëùëÿìâìãìììíìðìòìôìõì÷ìøìýìþìÿíáíæíçíëíðíòíôíõíøíýïëïìïïïðïñïòïôïöïøïüïÿðáðâðãðæðçðïðððòðôðõðöðøðùðüðþðÿñáñâñãñäñæñçñìñïñðñññôñõñöñ÷ñøñùñúñýñþòáòãòäòçòëòìòïòðòòòôòõòöò÷òøòùòúòýòþòÿõâõãõäõåõêõìõîõðõñõóõøõýöâöìöîöó÷â÷ë÷ì÷ð÷ò÷øøàøâøìøîøïøðøñøòøóøöø÷øüøþùîùðùüþàþáþâþãþäþåþæþçþéþêþëþìþíþïþðþõþöþ÷þøþþÿáÿâÿãÿäÿåÿæÿçÿèÿéÿêÿëÿíÿïÿðÿòÿõÿöÿ÷ÿøÿùÿþÿÿ',
    214320
     321
    215322    );
    216323
     324
    217325  $res=0;
    218326
     327
    219328  for($i=0;$i<strlen($s)-1;$i++)
    220329
    221   {
     330
     331  {
     332
    222333
    223334    $c1=$s[$i];
    224335
     336
    225337    if($c1<'à'||$c1>'ÿ') continue;
    226338
     339
    227340    $c2=$s[$i+1];
    228341
     342
    229343    if($c2<'à'||$c2>'ÿ') continue;
    230344
     345
    231346    $i1=ord($c1)-ord('à');
    232347
     348
    233349    if(strpos($a[$i1],$c2)!==false)
    234350
     351
    235352    {
    236353
     354
    237355      $res++;
    238356
     357
    239358      continue;
    240359
     360
    241361    }
    242362
     363
    243364    if($i>=strlen($s)-2) continue;
    244365
     366
    245367    $c3=$s[$i+2];
    246368
     369
    247370    if($c3<'à'||$c3>'ÿ') continue;
    248371
     372
    249373    $i2=ord($c2)-ord('à');
    250374
     375
    251376    if(strpos($a[$i2],$c3)!==false)
    252377
     378
    253379    {
    254380
     381
    255382      $res++;
    256383
     384
    257385      $i++;
    258386
     387
    259388      continue;
    260389
     390
    261391    }
    262392
     393
    263394    $l=0;
    264395
     396
    265397    $r=strlen($b[$i1])/2-1;
    266398
     399
    267400    while($l<=$r)
    268401
     402
    269403    {
    270404
     405
    271406      $c=$l+(($r-$l)>>1);
    272407
     408
    273409      $ca=$b[$i1][$c*2];
    274410
     411
    275412      $cb=$b[$i1][$c*2+1];
    276413
     414
    277415      if($ca==$c2&&$cb==$c3)
    278416
     417
    279418      {
    280419
     420
    281421        $res++;
    282422
     423
    283424        break;
    284425
     426
    285427      }
    286428
     429
    287430      if($ca<$c2||$ca==$c2&&$cb<$c3)
    288431
     432
    289433        $l=$c+1;
    290434
     435
    291436      else
    292437
     438
    293439        $r=$c-1;
    294440
     441
    295442    }
    296443
    297   }
     444
     445  }
     446
    298447
    299448  return $res;
    300449
     450
    301451}
    302452
    303453
    304454
     455
     456
    305457function _charset_alt_win($s)
    306458
     459
    307460{
    308461
     462
    309463  for($i=0;$i<strlen($s);$i++)
    310464
    311   {
     465
     466  {
     467
    312468
    313469    $c=ord($s[$i]);
    314470
     471
    315472    if($c>=0x80&&$c<=0x9f)
    316473
     474
    317475      $s[$i]=chr($c-0x80+0xc0);
    318476
     477
    319478    else if($c>=0xa0&&$c<=0xaf)
    320479
     480
    321481      $s[$i]=chr($c-0xa0+0xe0);
    322482
     483
    323484    else if($c>=0xc0&&$c<=0xdf)
    324485
     486
    325487      $s[$i]=chr($c-0xc0+0x80);
    326488
     489
    327490    else if($c>=0xf0&&$c<=0xff)
    328491
     492
    329493      $s[$i]=chr($c-0xf0+0xa0);
    330494
    331   }
     495
     496  }
     497
    332498
    333499  return $s;
    334500
     501
    335502}
    336503
    337504
    338505
     506
     507
    339508function _charset_koi_win($s)
    340509
     510
    341511{
    342512
     513
    343514  $kw = array(
    344515
     516
    345517    //00   01   02   03   04   05   06   07   08   09   0a    0b   0c    0d   0e   0f
    346518
     519
    347520    0x80, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,  139, 140,  141, 142, 143, //0x80 - 0x8f
    348521
     522
    349523     144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 0xbb, 156, 0xab, 158, 159, //0x90 - 0x9f
    350524
     525
    351526     160, 161, 162, 184, 164, 165, 166, 167, 168, 169, 170,  171, 172,  173, 174, 175, //0xa0 - 0xaf
    352527
     528
    353529     176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,  187, 188,  189, 190, 191, //0xb0 - 0xbf
    354530
     531
    355532     254, 224, 225, 246, 228, 229, 244, 227, 245, 232, 233,  234, 235,  236, 237, 238, //0xc0 - 0xcf
    356533
     534
    357535     239, 255, 240, 241, 242, 243, 230, 226, 252, 251, 231,  248, 253,  249, 247, 250, //0xd0 - 0xdf
    358536
     537
    359538     222, 192, 193, 214, 196, 197, 212, 195, 213, 200, 201,  202, 203,  204, 205, 206, //0xe0 - 0xef
    360539
     540
    361541     207, 223, 208, 209, 210, 211, 198, 194, 220, 219, 199,  216, 221,  217, 215, 218  //0xf0 - 0xff
    362542
     543
    363544     );
    364545
     546
    365547  for($i=0;$i<strlen($s);$i++)
    366548
    367   {
     549
     550  {
     551
    368552
    369553    $c=ord($s[$i]);
    370554
     555
    371556    if($c>=128)
    372557
     558
    373559      $s[$i]=chr($kw[$c-128]);
    374560
    375   }
     561
     562  }
     563
    376564
    377565  return $s;
    378566
     567
    379568}
    380569
    381570
    382571
     572
     573
    383574function _charset_utf8_win($s)
    384575
     576
    385577{
    386578
     579
    387580  $r='';
    388581
     582
    389583  $state=1;
    390584
     585
    391586  for ($i=0;$i<strlen($s);$i++)
    392587
    393   {
     588
     589  {
     590
    394591
    395592    $c=ord($s[$i]);
    396593
     594
    397595    switch($state)
    398596
     597
    399598    {
    400599
     600
    401601      case 1: //not a special symbol
    402602
     603
    403604        if($c<=127)
    404605
     606
    405607        {
    406608
     609
    407610          $r.=$s[$i];
    408611
     612
    409613        }
    410614
     615
    411616        else
    412617
     618
    413619        {
    414620
     621
    415622          if(($c>>5)==6)
    416623
     624
    417625          {
    418626
     627
    419628            $c1=$c;
    420629
     630
    421631            $state=2;
    422632
     633
    423634          }
    424635
     636
    425637          else
    426638
     639
    427640            $r.=chr(128);
    428641
     642
    429643        }
    430644
     645
    431646        break;
    432647
     648
    433649      case 2: //an utf-8 encoded symbol has been meet
    434650
     651
    435652        $new_c2=($c1&3)*64+($c&63);
    436653
     654
    437655        $new_c1=($c1>>2)&5;
    438656
     657
    439658        $new_i=$new_c1*256+$new_c2;
    440659
     660
    441661        switch($new_i)
    442662
     663
    443664        {
    444665
     666
    445667          case   1025: $out_c='¨'; break;
    446668
     669
    447670          case   1105: $out_c='¸'; break;
    448671
     672
    449673          case 0x00ab: $out_c='«'; break;
    450674
     675
    451676          case 0x00bb: $out_c='»'; break;
    452677
     678
    453679          default: $out_c=chr($new_i-848);
    454680
     681
    455682        }
    456683
     684
    457685        $r.=$out_c;
    458686
     687
    459688        $state=1;
    460689
     690
    461691        break;
    462692
     693
    463694    }
    464695
    465   }
     696
     697  }
     698
    466699
    467700  return $r;
    468701
     702
    469703}
    470704
    471705
    472706
     707
     708
    473709function _charset_prepare($s)
    474710
     711
    475712{
    476713
     714
    477715  $r=0;
    478716
     717
    479718  $k=0;
    480719
     720
    481721  for($i=0;$i<strlen($s)&&$r<255;$i++)
    482722
    483   {
     723
     724  {
     725
    484726
    485727    $c=ord($s[$i]);
    486728
     729
    487730    if($c>=0x80)
    488731
     732
    489733    {
    490734
     735
    491736      $r++;
    492737
     738
    493739      $k=$i;
    494740
     741
    495742    }
    496743
    497   }
     744
     745  }
     746
    498747
    499748  return substr($s,0,$k+1);
    500749
     750
    501751}
    502752
    503753
    504754
     755
     756
    505757function charset_win_lowercase($s)
    506758
     759
    507760{
    508761
     762
    509763  for($i=0;$i<strlen($s);$i++)
    510764
    511   {
     765
     766  {
     767
    512768
    513769    $c=ord($s[$i]);
    514770
     771
    515772    if($c>=0xc0&&$c<=0xdf)
    516773
     774
    517775      $s[$i]=chr($c+32);
    518776
     777
    519778    else if($s[$i]>='A'&&$s[$i]<='Z')
    520779
     780
    521781      $s[$i]=chr($c+32);
    522782
    523   }
     783
     784  }
     785
    524786
    525787  return $s;
    526788
     789
    527790}
    528791
    529792
    530793
     794
     795
    531796function charset_x_win($s)
    532797
     798
    533799{
    534800
     801
    535802// returns a string converted from a best encoding (windows-1251 or koi-8r) to windows-1251
    536803
     804
    537805  $sa=_charset_prepare($s);
    538806
     807
    539808  $s1=charset_win_lowercase($sa);
    540809
     810
    541811  $r1='windows-1251';
    542812
    543813
    544814
     815
     816
    545817  $c1=_charset_count_chars($s1);
    546818
     819
    547820  $b1=_charset_count_bad($s1);
    548821
     822
    549823  $p1=_charset_count_pairs($s1);
    550824
     825
    551826  $w1=$p1*32+$b1*64-$c1;
    552827
    553828
    554829
     830
     831
    555832  $s2=charset_win_lowercase(_charset_koi_win($sa));
    556833
     834
    557835  $w2=-$c1; //Îñîáåííîñòü êîäèðîâêè koi-8r: òîò æå äèàïàçîí ñèìâîëîâ, ÷òî è äëÿ windows-1251
    558836
     837
    559838  if($w2<$w1)
    560839
    561   {
     840
     841  {
     842
    562843
    563844    $b2=_charset_count_bad($s2);
    564845
     846
    565847    $w2+=64*$b2;
    566848
     849
    567850    if($w2<$w1)
    568851
     852
    569853    {
    570854
     855
    571856      $p2=_charset_count_pairs($s2);
    572857
     858
    573859      $w2+=32*$p2;
    574860
     861
    575862      if($w2<$w1)
    576863
     864
    577865      {
    578866
     867
    579868        $r1='koi-8r';
    580869
     870
    581871        $w1=$w2;
    582872
     873
    583874      }
    584875
     876
    585877    }
    586878
    587   }
     879
     880  }
     881
     882
    588883
    589884
     
    593888
    594889
     890
     891
    595892  $c2=_charset_count_chars($s2);
    596893
     894
    597895  $w2=-$c2;
    598896
     897
    599898  if($w2<$w1)
    600899
    601   {
     900
     901  {
     902
    602903
    603904    $b2=_charset_count_bad($s2);
    604905
     906
    605907    $w2+=64*$b2;
    606908
     909
    607910    if($w2<$w1)
    608911
     912
    609913    {
    610914
     915
    611916      $p2=_charset_count_pairs($s2);
    612917
     918
    613919      $w2+=32*$p2;
    614920
     921
    615922      if($w2<$w1)
    616923
     924
    617925      {
    618926
     927
    619928        $r1='utf';
    620929
     930
    621931        $w1=$w2;
    622932
     933
    623934      }
    624935
     936
    625937    }
    626938
    627   }
     939
     940  }
     941
     942
    628943
    629944
     
    631946  switch($r1)
    632947
    633   {
     948
     949  {
     950
    634951
    635952    case 'alt':
    636953
     954
    637955      return _charset_alt_win($s);
    638956
     957
    639958    case 'koi-8r':
    640959
     960
    641961      return _charset_koi_win($s);
    642962
     963
    643964    case 'utf':
    644965
     966
    645967      return _charset_utf8_win($s);
    646968
     969
    647970    default:
    648971
     972
    649973      return $s;
    650974
    651   }
     975
     976  }
     977
     978
    652979
    653980
     
    655982  return $s;
    656983
     984
    657985}
    658986
    659987
    660988
     989
     990
    661991?>
  • drop-in-dropbox/trunk/functions.php

    r426910 r426941  
    11<?php
    22function initDrop() {
    3     if( !is_dir( dirname(__FILE__) . '/tmp' ) ) mkdir( dirname(__FILE__) . '/tmp' );
     3    //if( !is_dir( dirname(__FILE__) . '/tmp' ) ) mkdir( dirname(__FILE__) . '/tmp' );
    44    $runflag = dirname(__FILE__) . '/tmp/drop_running';
    55    touch( $runflag );
     
    1212        $files = ListFiles( $loc_dir );
    1313    }
     14    $files = serialize( $files );
     15    $files = htmlentities($files,ENT_QUOTES);
    1416    if( $files ) {
    1517        if( !get_option( 'drop_drop_all_files' ) ) {
     
    5456    if( !get_option( 'drop_drop_all_files' ) ) exit;
    5557    $files = get_option( 'drop_drop_all_files' );
     58    $files = html_entity_decode($files,ENT_QUOTES);
     59    $files = unserialize($files);
    5660    $files_num = count($files);
    5761    if( $count < $files_num ) {
     
    6468                break;
    6569            }
    66             if( ( strpos( $files[$i], 'plugins/drop-in-dropbox/tmp' ) != FALSE ) && ( strpos( $files[$i], 'drop-in-dropbox/tmp/delete-me-not-118346814134' ) ) == FALSE ) {
    67                 continue;
    68             }
     70            if( ( strpos( $files[$i], 'plugins/drop-in-dropbox/tmp' ) != FALSE ) && ( strpos( $files[$i], 'drop-in-dropbox/tmp/delete-me-not-118346814134' ) ) == FALSE ) continue;
    6971            $runflag = dirname(__FILE__) . '/tmp/drop_running';
    7072            if( !file_exists( $runflag )  ) {
     
    9294                    $temp_name_ext = $file_name . '.' . $info['extension'];
    9395                }
    94 
    9596                try { full_copy( $files[$i], $temp_file ); } catch(Exception $e) { echo 'COPY FAILED'; }
    9697
     
    9899                file_put_contents( $runflag, ($i+1) . ' out of ' . $files_num . ': ' . fixEnc( $i_dir ) . $temp_name_ext ); // write currently uploaded filename to flagfile
    99100                try { $uploader -> upload( $temp_file, $up_dir ); } catch(Exception $e) { echo 'UPLOAD FAILED'; }
    100                 if( strpos( $file, 'delete-me-not-118346814134' ) != FALSE ) unlink( $temp_file );
     101                if( strpos( $temp_file, 'delete-me-not-118346814134' ) == FALSE ) unlink( $temp_file );
    101102                $c = $i;
    102103            }
  • drop-in-dropbox/trunk/readme.txt

    r426910 r426941  
    11=== Drop in Dropbox ===
     2
    23Contributors: Denis Buka
     4
    35Donate link: http://www.denisbuka.ru
     6
    47Tags: dropbox, upload, backup, files, directories, subdirectories, files
     8
    59Requires at least: 3.2
     10
    611Tested up to: 3.2
     12
    713Stable tag: 0.2.1
     14
     15
    816
    917Upload single files or entire directories with subdirectories to your Dropbox account.   
    1018
     19
     20
    1121== Description ==
     22
     23
    1224
    1325This plugin allows you to upload single files or entire directories with subdirectories to your Dropbox account. You can use it for backup, synchronization or whatever uploading tasks you might have.
    1426
     27
     28
    1529**Features overview:**   
    1630
     31
     32
    1733* Upload entire directories with subdirectories to your Dropbox account.   
     34
    1835* Backup your entire site files by pointing to the WordPress installation directory.   
     36
    1937* Specify a Dropbox folder to which your files should be uploaded. If such folder doesn't exist it will be created.   
     38
     39
    2040
    2141**My other plugins:**   
    2242
     43
     44
    2345* Intuitive Navigation (http://wordpress.org/extend/plugins/intuitive-navigation/)   
     46
    2447* Generate Cache (http://wordpress.org/extend/plugins/generate-cache/)   
     48
     49
    2550
    2651Links: [Author's Site](http://www.denisbuka.ru)
    2752
     53
     54
    2855== Installation ==
    2956
     57
     58
    30591. Unzip the archive and put the folder into your plugins folder (/wp-content/plugins/).
     60
    31612. Activate the plugin from the Plugins admin menu.
     62
    32633. Go to Settings -> Drop in Dropbox to set some options.
     64
     65
    3366
    3467== Frequently Asked Questions ==
    3568
     69
     70
    3671= Any new features planned? =
     72
    3773Actually, yes:   
     74
    38751) schedule uploads to be run periodically at a specific time;   
     76
    39772) ability to exclude certain files and directories from uploading.
     78
     79
    4080
    4181== Upgrade Notice ==
    4282
     83
     84
    4385== Screenshots ==
     86
     87
    4488
    45891. Admin page.   
    4690
     91
     92
    4793== Changelog ==
    4894
     95
     96
    4997= 0.1 beta =
     98
    5099* Initial beta release   
    51100
     101
     102
    52103= 0.2 =
     104
    53105* Ability to upload files   
     106
    54107* Improvements for long uploads   
     108
    55109* Added "Abort" button   
    56110
     111
     112
    57113= 0.2.1 =
     114
    58115* Bugs fixed   
  • drop-in-dropbox/trunk/run2.php

    r426902 r426941  
    11<?php
     2
    23require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
     4
    35require_once( dirname(__FILE__) . '/functions.php' );
     6
    47require_once( dirname(__FILE__) . '/DropboxUploader.php' );
     8
    59require_once( dirname(__FILE__) . '/a.charset.php' );
    610
     11
     12
    713if( isset( $_POST["count"] ) ) {
     14
    815    $count = $_POST["count"];
     16
    917    dropNow( $count, 'run1' );
     18
    1019}
     20
    1121?>
Note: See TracChangeset for help on using the changeset viewer.