Category Archives: 仕事

phpの難読化について【その2】

性懲りもなくphpの難読化についてゴニョゴニョやっております。

今日は、Compressor.phpについて少し改造を行ったので、それの日記。

 

compressor.phpは主に変数の名前を書き換えて行くのがメインな処理なんだけど、これがチョット甘い感じがしてました。

例えば

$result

とかっていう変数があったとして、compressor.phpは単純に変数の出現順に$Aから$B、$Cとアルファベット順に置換していくだけな感じなのです。

なので、前にも書いたが「;」で改行入りで置換処理すれば、ある程度は判読可能な状態になってしますのです。

 

で、もうちょっと見難くしたいなぁと思っていて、変数名の長さをめっちゃ長くしてしまえば面白くなるのでは?と考えました。

で、compressor.phpを改造です。

 

とりあえず、$Aとかいう変数を

$rdgKFPerAXPtgGmVYCGmwRDsisejuCEXiYExwtXjVpLfKJMwTjUgDbDAYzZMVbYhSwGusbZehMsQRZXPdLmWzfjtiJQsFWJmYGhr

とかにしたい。

こんな変数名が連続して出てきたら、まぁ見た目で抑止になるんじゃないかなとw

単純にA-zまでのアルファベットをランダムに並べればOKなので、以下のような関数を設置。

private function set_var_array() {
    $this->var_array = array();
    // ランダムな文字列の配列を作成する
    $base_char = array('Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M','q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m');

    // 百個作る
    for($i=0;$i<100;$i++){
        $rand_str = "";
        // 長さは128
        for($j=0;$j<128;$j++){
            $rand_str .= $base_char[array_rand($base_char)];
        }
        $this->var_array[] = $rand_str;
    }
}

内容をお分かり頂けますでしょうか。

この結果、

$this->var_array

の中には以下のような配列が出来上がります。

Array
(
    [0] => nmEcYyxGEzYylaPpxyfbAFNLZZBgeXeHzyYZRrIIOucHANyTjfqXSWkmHmuloucggAnuCKOoDfebTowdaNdTMIWykjYKzzBCNsQoVEebIraDFMMnMzpUylBmsdaGQNje
    [1] => kfkAajKpUrSmcrqfpJpjtkTWYrRXRIfswRwXMMKhhnJradraoKgupdEUjmWdaOImGoQfKjomykIKPEYeMmcnaqqKkwHAziZNjWdXFVTjrETCaeEnJslWgiHlZeGYyuwK
    [2] => XFePCWqGMAnJZikLZBqCFqoMaJJnaULEFMhaGJMbhqIWRSRvqTqAENIVARfsbemJIQXrxojMZdJhLgeRmGqkHHIXVwURnjrOvXrdViKUjXebfawEnDYFierwXQTAQPUy
    [3] => myQBgmGnEWgyJDqXcDUmobGNydyhPstbESuBjuZFodsaHJEdoNgOSuLLXVDkclWywMnCaiTDnIvqjVoGTVcqmwhCbuYKLZvSjuTkbmpwezfpxJzvtZcqQXvaftdAXcMP
    [4] => oTyYsPRsJICrocBqqdywyVkduzZeVOUjPuLBEMlHztUkIiVQRuyWVajfAeibuGXDCLhCckZkdtqhbppryBfyzbVKdTkxJxWqwSCkntJNerpiSHoFHiWWlBIhtvvBcReD
    [5] => ifTpjYXkGbQpzehwCKFNaMmPXrlbJUADNEEgsQAkmWZeJAMkyQAbIKTZgCUmVgfKncnQesCPBNhbAFClernbfFjLcMpxZDRsVEAwbMDFSxImYJLJkKwuVzzXdtzDlOKa
    [6] => vlyNSMVoirBveCvPKusEaviirGYnpAgqqDnizfybECGsheSzFzUKVDFhtMUKjtPgfDmBpTOCkXTkFuFiKCAMqOUVdNoGLrUXmFLJSjKRVwBGFpCxRgzNcYGpjZBFmJNx
    [7] => IrwpbolGleioDqNhkYSDUKsfPTAsbyLPedkTNuyeNxPRImDOSJEvlnlxjZpNdUdWzNdBAGwJFZcPVsPYiadDWbESBzwUbunLfaCOQzlVZkmSlzXzFYqGeLtrOLogTKAT
    [8] => iJrhIZSQCkNJLiLBKbIdfWOysUQRNrPUPjczXJZzLWuHKBZVyUDCAnRFNpuwwKVLwbzKkSleukSWPDHrzCBCruhbjUIhwUpbixhaBGGAomdXUleUMUayHIoQpqlkAKzH
    [9] => fLTyiJWdEXCBEBBgelaLszsUmPqriyDjIhfnUzKWGzXYdBfBXFGXRoYMPopgvXjsmEUJHczunzDoPiReIdMptyugtUBEdbuoRXDcbfHgsDOJsMsqeSYFpzZmhTixMTQG
    [10] => FkJRumKqMyTNUZgbHITzfGpodVSGFOaPBCdTBFjDkDVxdYnncUFiKfFsZMMXRHYSTvZIOdirupRfzykFhuUSziuBavCrITbadPoXgzuITjBolaJXxkRdwWYejfygtehW
    [11] => hkPASOasuMAXdnVHXOVEJzVuhxiuSVODNWTDVNjqmrgLakMDIlTwFBJsEvyPaijVCcjbpTrmAMKfLOZqfpjFZfNiopHrMlQgapCJPVqBsoKLgoVUBGTamvpGRPbFudJW
    [12] => rqgTAxPxIURIJpfOKAZbnUXgEZMpEaKeZGfPEfyPsyBStFusIvyljiNITnvFssRwEGKNXkSpfpuHksTItQSEIiSRdkgUlqjupferszvzzerSLxuORFMngQUHfDKLylkz
    [13] => MpaOZRkyGfqPberrHbZNqMEGRCwrQFcWOefvNoWpPMhHgwNZzhSEhMwLRHOKjiqmnvaTqbcbmLZXUKaXgcFYGSfaDhbFhaPKEXCWYmcAIAqPPALadlTMPDWPHuZeFIMI
    [14] => hOrLqXckNufJyDSGaMpfATytFShCdVihdNZwentAAEdaeHpaLnOcCNBZqkDgXSfmJuyDdjtxVdapVzzSJOEldvSwEgczAHeJlHATcbkPvyXxKGHzyQJZGdErzPpllpra
    [15] => spptTgcdbeQDzFfhQMLnIvxooodqlnPlQZfEVjUkGjlbiKvhBaMjuTqAPExPQkeLlmRkJHgasFHIIqbbTJYAzkNIYycLmbvrSCzpuJbgzIJnofwqqrLYDwEWrbKjCLKQ
    [16] => HTCciTCmmdpAdslIobPDhSXXouyZWoNkMoCrRcgmsOkEDoiPzFWstqnzbqgAPqUErmNYhIWkwfXkDSLHwsgsZbgTZADFWzQCqeoFrqhQENwqeVoPmcWzlmJIuUydMhNr
    [17] => cAbKTJpjTvDYabRjxnPHSAqCojlZjcVwEIlZhNTWLKRIyrWxLhBmpufvbwyoMPwNRIpKmXRUmFXlTpzjozmjqnZTkFWVXBsomBGgQoCfYHJbQMxAiLuZQOirznqxrRao
    [18] => poVhKBmYSNgQIJFRujUtiEOIYpSiobxVkfoWdPPmfJNKlhNDKXgmUUoOauBVJYiaBjInJaJTzvuzCmLibVDqrfScDZEJaBdDkIivJRdatgFAuSmSftiMFKuwEZvBiQeU
    [19] => hMTZbsxRKIiMYlwUjpVKLOEhFKkmHqcMCDEmNwFwkEvJpoQUinqnYQCpvHmGFfreEisriAzCwmSwZDkaVPZataxcAdeKOpAJNRqXfikkWRXOhPIfgwwMaOdqhgWahcOZ
    [20] => UKsnfKEFNwPnEOCMNYAFSBksqtYOeiiwEqVZFJiyCeoESiUVHTnjaWwNtvzEKqNTjVelNUvxAVedGVMnLposaVGXGdOZbDmehwENEhBKGNrWcdGebfxSAsuvqusjvhMm
    [21] => XjFikbeQETgFEWigWdKQTFNptdbajWddehzzQbcMBqaUJgKiorjoWhKpCopXcjmqIFiQXZnUZnqiZWrKpykkPKWTahygIFIkylYwLBBmlxVZmhTzkxtrhgYDMraLqiYk
    [22] => wNNrbLWaxjiKWyqRYpIXynYVsxPmtrsDkURKjFzXJUQgJfBGgVqEbYKeKBOKCfJuVneGwEGYvQcYhvEatvqMuefgIhppYVKvRCFcSuHieASgOIRGYZLLEUeXcWJgisKy
    [23] => kuPnUymZAdICsonzxYpCDCpmIZbghnYhmrMGISABGeksIRwEbmLBXUsgNNIjpHdJCDhpTbSXNVAQzDVBcSVrBkhpsdWBIPxbaAaxJmpqvsLdsufrLTAFHIIYqdQKPEgn
    [24] => IePOxIHHOAhgzquGUPoIIKlWDkILyFaiUonFeFwfhVowmsNkMCNiOyOcUNfbwAxOBGzwGLRHBXIngeUqgUFJhuhdOaUoxldiGfOyUTlXpYRdYNsFxmeFkZYCvxEGpHxe
    [25] => qQinzTySXGPrJIKOpCpcQjjiiJLwzwLMIcrGrlPdRuBHCAfkayOfJdXOVdQdvlfPPSowEWkiVOWajOxJCmXqgtDvtGpGsohJhaNKMGKgPwmmYebqOLhDiiOIIXbCxOlG
    [26] => OrebsNrWkBUoDKOQOvmeUyslXIRgDxGZnktLtqmdKxgyjWXhyfdhxzpHXOGKUIKAEpEbMsLRYwCcmMcHOgxEttgCxeXwhtmAvPgANClQwIEnxZCztRXkcGQSeUIRsMEN
    [27] => EEiWHXxRImNUhUIvbbqohHviGQJYdfRyYCMRNksUBmplCzgWhdyauQbxXHBljsxFcVKRAwZpEEioDYbtYGpZduzYYfqMbVLBYxlkQARRcqZJNRNmNofzudbFcZSGTBdp
    [28] => lvdzGBXZWuRKkSKGQKrdXorBcKopCddYTkHtAnQVXQbmcpKJHOkRTFDShIGsjLMHdALMJGzfpZjUkUlsYhPIhNTnZfoxbUdYmHVrkRzZMYORKztGBQMzoTJsGLxRvOoK
    [29] => RzNePhoYLHVYMJmRsFcZpwsrKaftDTUWHwlUhWUJOBsLPUKSqUPFIxsyyeoHUcEVlkayvvTGWoLrPctydkYVfbVSRvKkMZsjJiioQUYRgAoplaXFSrjhoUgrBDobbadz
    [30] => WMvTjiEkRTpIEkEQMVFHnuLNxwOZlNozAumpjPemhpcuhCWmjwFOaTJPVhyKRvqMrcyqrPvnZQHkJMUTNwPqeRfiVxrzGaUkGYYctViresWhNDmPsYBTmNfkDquauFNQ
    [31] => ahcQYbvWTqjMotdscwasIrHTUnklSjWFovmHhrNuGeSsbEJRkNcIypnYilAztdxGlzfOkJgTYVtKIZENZjiqGVrAkvCpxEIzkuibPTLpNeoLQXRepsbuByVrVzLMRLuF
    [32] => LvPDcpsGGJpfSUAOqmwrRHjkCUtvkVlKSbdOARCWVgWkmsHlzaELdyenZXuWDqchlkTbMvmnvjCedMczvpgPNRQOgKHkEAvusCCIFXNNlAgPjrVlbpXQAQkseuMxpQcf
    [33] => fNfxoOIDrdxoIyJGBpKWVERFPEgiCzQYKpGjSmcolNRbJuroWFYFHpKMNwkoriSUuePbvbPbTAunOaYgucMLEaewYIkbsahgRbdUskFcfbukkZGRBEdIIZzLmbJmGlHG
    [34] => YEjkTKwEMMBaEfErtgNoLOvSVSvxbcMrjXPoeoEkCQefIFfLWGBfjnmNoHCdqvwvGHVwkGVCNAKJPpoBDukhLUfpTYVhQMpFXpelFNfTIkopvWBuYDNIXBMTnWHnLSJQ
    [35] => UhLyCJDyjtdPvkwEajJbWqUfbQgWhvUkCZdqYymwUKSMEarUTuwUAXjfISBhIfWxJllrzQdCwYmxradPjpyjtMQhtAUhOcboVKShmeDvjQwEjeodFBWHKLjYQbYoTYqF
    [36] => tJBaEUWRvsSKsVdnDTaHLIOHHsClpxqMGTKpwcyjYUlWQBZGxjCEpIFgFSrKuhtUsmVXATVQCWMcoyvhuGwWnRuxtRMDxmGjfJwwWjQSGSxjOTwalvEMJOQRIzcAfaRr
    [37] => JycXTaiOiALkhIEdWsRYWsZpsAMUgyMHbDRzsVDvyOrcbKBKvYjwrhynYnCBwktxiICjmVbTYSdqtITGERAJEidsXNNAUwVUdgIZHZAjyDoBpMVZeJTZIEKaITJsmBlj
    [38] => jURoOLjRYhcwQpEZHHMCcawyWJmMfFQixjNsLfOjRDWKOdwgxXJVLzLJwWNFqMhAVRwSDyenpMpJdjYSZtqlQQskcXwEDqkqKSJRhYQYiumCtcYYQnISoCgdAdVsHJNB
    [39] => JILhCTRZNXxSHEHkTmrHBiDfFuinlyBtWsGTRVhOgLjLmTevCGTWorvODRrvppWQNxIBKbyAqrwyfylfVzPBwWuawEhyJknXwgRBIvDsapntrgjAqGzYHbDuHFZrBAGd
    [40] => dqTxbynefTohZqrXJxgmIIWCmthCIcFlOhHbyJvDMcDIYOLEkZQgSSTpNFVsAGJuDgHsUPkfpdLQhLKqgkqULEhyZzJuqpjOCcEOhejDZICESNBsPwLSStqPFOKHeQDj
    [41] => xcTIhpyIQNRwnhOlHhvOctRshkDsbeMCZfRPNofZhnoYUfNAEXBiFuiySpBHHuUwhdOdnzFbZNJrBJoYCbNShVwjhKFaYPosVGVXsWtckYEssFRpVJIWULEZXGoGUPMo
    [42] => pCpFhDeyDYLEEOjDkNZCvTjqhOtFZdjxybQaPYlWNijTyOtNxFezUvkcnKhzeYqZNMJBpdBLKOlipZNkwEkBFcamkJMWfybdlrdXcFUqwEPWuDOxiyjmEufygDdlACTN
    [43] => OpzdqgDGUNAOXEpoqUdMyrCbBHbjbUBPSsadHVGivwKAujyCRhyjmzyoQaBPvRmPJvtdLsCxOssuejenAIDogBGivRBLPYWkbTpaauAgJUuSeyIJeujMcVgiTRpUSByI
    [44] => jnxHcaoymLJCLLTCFZwixbdgCGiFDQAGDQxkVrhCoooYSFeXBSMJHoioewdpWNCxKiBsURhYPbfSfIcNTATSfrTJhxiwRlhDWWQuGBVBAuArjAWAbeTnGEBXoSDehPLZ
    [45] => pASufvXFQxwfDJXbSqwYCEzMxRnYajskUXdWvuAAsAQSILVRblFdOwVYLRqycdkCPeEDRnXkfQzPVwElqGnCZPovtCVSjFeUwbQHDrJAEaVpaYaniJeIgWkCEcbbOKgL
    [46] => rGsVWlVMDMcwofhTBLnntjPHPCnzRVGSCIayxJnoOuLjOZYhtTUFprQsWeqGhaJvObDNBeWJQFzARGieLCyyGvbZesJpdXNpYTIbKBglgdKafvcfgBvdYQRJahinzEfd
    [47] => nzmWDgLmHXAuqiEtufDWTHQTsTcahkuWXxtrIbMPTfVmmSbdyyrXyFBThfwQWLSrfrmlQFBfpvWwHOMYeAwBZJbtLFWiDcRDjldCKsNcubDXQwSAiYGjBHThHHziLABR
    [48] => KimAYjfiDrqLvudXolzKpUpdznOOMKjJeNDcqpqSFMqpWDHZgMfhVZYKsEXnVNRQABKzdzpjLRktvKXpcisNabMzdsQPSZrTbsyVygxFcZAVRKNfQZckiUqvTZSlKpAo
    [49] => ZnveuNAHopPrNBsTIxUqgEBCpbaINdaKSNeoUkTcuvAhcdvgbsygSnGMVZRnNMlNNzZHAbPuhFsBiLUBoxeuoPmunwzhhMlKoVRBCKjYSjsNukDMLvfoBuJSagpeWyst
    [50] => YCVXwExTAIJALkqLjJmBOnFluxYWXfIuealFFaoPQBuJjTglvCLqwbTDklfYuqoSqMecbXwdQYJrzFHDfDfSIFYEMkWuYBibZciYlHNMWEpUIytqTjzhrdMBqoaMPouk
    [51] => jsCjgxkoMEAQQDxhctkXeqplfodagGaGJxuxHkmFQsKXkHCPoxnRjxTTHpzQPcuoxmAeCbrerPqXXhFQsrqGmYyZoRrGAPwEvPkmLkMZPdlsTdlrydnCxPppAYjtYUsc
    [52] => TNzbloAeBzrbygEhyaalMoIDXoRoQiAoioTuQQhFmzBNtQmrKXSacMJkvmORwEeYeyTZrHCKSnUIRoCGMQHLRpPcUoqQVSgOucGyTyFIZEeyPTPoZWMmUmVsKKxKxOva
    [53] => bLdsjBnWOHrYFDfVnZpmrbiqVlWutAkAkUrIAVNZRztVxdHXuXPFLzhtlCpmCKReucnpMezhuQVABNsKAuGiPxModwPZBRsdOpIdmlEJbGKWjIJbZkAJnTrGgZLwnNFV
    [54] => TQWYHTdDsLpcxLyeaPbIbfliQSrNakzhPzogQztfAAWuCuxWaSsimzJBhrsNIwEaWJbHokfJEkAsHuTFecalYSJRtWSCAqPFoBJRmPkQgGPodRXXNImRFHecJbNiXvEt
    [55] => SSfhuPuVvBAmUvuUotrVbTHRZGZbdulEoiLcHhQXZYAdcWybFfCqhWnCEWIhCTCULhVitFYxrUehRwgMCQucGbKLopMFhEhchDMsGktycqhvCoNcAuoRfXFMBhrQpHOl
    [56] => XpklAMdDOLEiQpSioIdZkuyJQkqNMYiAXzrfKMpNnZSgoGNqcsvsqZXSiQdVwjdEuZQpBcDBIdxbsuiBUpOFhKlVARQYmypVMhqRlNPfHyYHHdIZocVlNWBvBvEksBsi
    [57] => vNClMdJlzauxzRxYUZsyszkDTRveoTMZWJiUXTPLKgcTgoosyCgfoDpgAWWrsCAYfMUDqtzShjVTVEinVaPONUmrsiWMvKlGNsCmPOBKXFZFLwWLdOlTJBLdjezIupML
    [58] => pYbveYSobLmNNjWVeRGGthZDrqyFGllHymjvRRaVeHSEdPSXHphoVKqViKTBJQymPThwCphZRhkznbeevYQxZXSWfIcAeOORPlzIOiVsUOraIXBEyrhiVlHcShJuObtA
    [59] => UfdsSACWQNJeFLOJLKxUNQNaNoqznxeJsMnoxkKUYPvMIkjBWSOTEeKLBNbhhvTJQiLhXYYPBHgsdVkFajobkkqkAeABbzXUFevnPXziSwpPKCYExgNqdhYBFlKaGFSJ
    [60] => haWpSaAzbLYDokSGafcaFboHoMgPiNjpQJZYORJIBVnyLjnhWadYLQHgePOnyylbVpLjivNNrMbqLTTMVJpbvQYcgdTxoAceloafZJKllVTpKsTjIYaorYKLsDCBxvWN
    [61] => YEkzuSKLrcVUcKhaKNJBaAoedDwuqVABcZYdocABicMIbiTIyMpFekqSxdForvtReNSPVFRBlUmClsrJYeyGLRECdBCjpeueaqcZJKKiWYjymemDHkQmwPpzZGLPXLIT
    [62] => LBsexlSZDBNRoHTGkZYerUERhVQOCVPBBhNMeCHmKPHRxxhElyvcYXRVlTdzvZxTaeeDWLhcOOpLqieuIRbPGMZYRiyPvQAUyTyLXKHPupyyEHVDgejPyqUdWhKyaDnw
    [63] => znnzwgynBoOSzGOoVekQNkQjFlGEzMJjJRmgRzqrIOqDJlOzCtekngeCbeFDAheiVVZeOZKsDZUsUQloHhKfXFsEQBSRHUWZXezGscnHSiKtbiLDMCAOiWvCYIkCYbvT
    [64] => BunBaubfCQxvyUcJjjnhUCAwHwPdSAxIHoPzPMurubUDFXtKPkMAWMEcErrIVhmlIfYXSzLlWeiEWPQKYdXltDqZbZHMmtqQEQCQmjABZGRfwgYFyoIUETXlNFVbaHtP
    [65] => ZoKnhMqMxSekkqMpWeIFZDvwVVvtmATUxaoBgxbiyQQTvuJMHQuYidkqGgxobhnaVQVfKsiNldUggscdCvfeqkprgdRSsIxzlBSovPcFLAsjOjpOUjyRhtcYrrJqPUae
    [66] => gtsBlMEuLnUJXgeDfphLdziUfbasCrYFmXOGTJjUurAuOxWSPwKUpLIdfbevRrlIYMexCheIMsOyGAdQLEMqDWIVTFdplLHwCqHnnkNwcENsXIrRDOlzwpfJQASwswRl
    [67] => pUqlXJOWErkyPYncGfgzENerVGuTAmwPBeOYCusPiVlniUPIIruLAgGkNscyHUAIgAzMGAFKOBDVyaHBSauQaxWqNkadJjtBwEoqOOFHWxedhGviAylxNYTVPAIAavxb
    [68] => pRZTYycRnVqVqQBzPAfQpQpwIICVidycnXIIoaFySNJfpWwEYXJoFbulzWzfUsooYrBBoONJBYYfASFDZTdnRhWIxwNHqDteXsNCgpylniHeZelBWBwEcVAckFMecIqk
    [69] => SFpmEZhiYagVjgKpjcXExRolHSVLyCvjmtAiRoYsmDcSUcjADbztwxkXkpLlJjCYoxJXCKjlKAVEDHEcIHINAOoqbOWmLWyOpXUESeoNmEbuzmAzHnidDkCCHpmJSaFJ
    [70] => NytrghpXoAIOSejKckhgGLqxarlTjlUdXmeySBpdETGTrISAWijElwJyaEicjoELTDruNCqlhmGepFMvxFiKAljnWcDQDmHPUkoIEeLoxetffHUwoDaEakYaLpISHEga
    [71] => QZypQqEeDySswmUmpxFLOEGcMkMkYGPOGKfysaoyoZianthmdzRfuihPRubTkYifbeDySMyFCHBAMrSAcgkijcMfWWqPkKLRjPrIsnJiIMDmxYnSsLlYBDylFlIaYqmd
    [72] => gydxWwLXgOcewdxFIrUhXiePvMpOZAZKsHAqeGAdRDplzQfuMOKltEyaaAKbLvUhnzbiXLxQvoAFaaIfHVJEDPXiRNzRvWKgPUFzBpCViqaJYOGpAxjKaFmctVibRylw
    [73] => nbFbiWIrxzvnMMucdoqnfzMFJEyIgBLjuTqFgDRnAjYjoUHfgpYqodlPUCvuzWIeXiOPmkXVodaPbCDdRhjUsioeYpRegrDAycozrWmFpkrEypYfnvmeQyBKhCKQnVas
    [74] => ywkrQzyfwyeQKMyTeKpECDBEoZQaOgdpXukIlllPmdXEZUKTeNrPbJJwEgXDwWAarxwJVDjraxZOoehLENZUwsxFMkXnEwYWRpcSRLeXXsQUWOjArEbfGUNbGTTcmbwO
    [75] => fKpjMmOXKIivhMECuswDHOSmFnLGzNdBdVRPHFoNsofXlSlBhFyBaMOeZhfavrMwkwgaGuDXzahBHuOcwejPgkLbxMdFKRbQkAKwYfTdEsMnNSGRaBqgKrqdKhUNJmtZ
    [76] => MEkNuezrtIhoQPOzZTpcXxvmvqvekpGGPGIYSafwhvpaXgmisOsXXhCKjUDofnfvjyIUkBZeaGPcALoUKQPkoxewFfamuzczedTUoWCDeGJgWHmnLlGMilgvMfcSxUfE
    [77] => jPULOpBHqBaADMjvqyXyUCndeVJuiNUzLTgAKFjuLjzyjAbqBTFdYVvkgXhHsgxGUFfQoYqjAYdUgUyYfLOsLmRiQxDfHEOtUbjxgwBAZbqEoawTcAroHULsMNulovHh
    [78] => zEDmymBKwLdCzLfBnDXkzdiIpInuXiNllkfZmQHzlwTUGJrATDNtQSVPTWgTHYCzRkOdwjnnYKUIoQeUkCulsrqjVhslEahqiegsLMWEzvVWEUpUVUperKPcDiHFoUqr
    [79] => xDhiGvxdyShrZBMmXnVcvrdIciCxBkenFoikfsXPTSGpjTWsLeCouFqjFmUZNQaYkfXyCjoQAoRQqewEMLWsLnJTIIpgLldIjfUMNSwEfOaIKVLntgmNbSTLJyKrkBgy
    [80] => zLuaCQJYaSZOUaIGZoSorjsYadoUyQsJBgNFoKnFGsrdYvaQHgRjgSoskgSoAbdbhRBJaCBKHCDsXaMJnoamcdXJquXVHQAuyuskBFjKAbcLjDMScjWFQTZbHpFJOAos
    [81] => HJxlfBXhEZFqOyylEVrHyzevptjGkFsLbKcxRKXRVeKArFXegwIxbAULdsrVdBgFJPZRcVlSUHhWGmiAKadDDXFeblIvZKRisfBLMdIMfQltbEFcfJqVnnxdezoYoidG
    [82] => xIoIqEyJmMzZUYngKbEJgZdorzyivZkmXmlXyhgbuUIEzWrIFSZbJlRvhWaYLDESEkNgrszhPzzLLmXaXUMwYsmHedJfhQkiPZRjkpcvGxHtqdbLIZljrTYeuHJADnkV
    [83] => ETUTfRirydssITvCKWAAakxBlLfvFqiXVbYKiXIDpjcmdQlllYSKrCoqhlmHhWDOlJfRlYgSffdiPfoYdoKObryuObvexerZRVVqhCRpbPrHQRWMJkClUUgXnfniNqmw
    [84] => CGamyWQhAhgnpSLShOpBymkcDaApxZYQFbrHcrVOAjsUGRPFEbGvJqywpoAkHLKNasInpwJGAkMzSlAnkzugJdsavtzwDZdxSNsECtoeGtTZElBJUJafAOjDGFuYRECr
    [85] => gYugOANRPAvgfPBjVPFruKoglYqZuqQXrKcvUhUluthYkIZJptcwClEmxwuVuhjSJMJhcMnEDasqRcbBGnBVBwjnRGaUzpBCwAJdoAbFjODlJwErMmKrCWSNprvoAZba
    [86] => euiOjmqIPPZYYVauwxKiXAzRvAzfniHLpCWzQkkRSxtefgPibtwxmJRXbITRhsgkAaFxNnPHZbDWMToUpVAVCmfWWgIHQoEMjbiBEvohVpopxbDJxgJJwELcRWyUyGRA
    [87] => TklhDsHBMfdaJbYJjJWFcVdUvQwZwWFLXhAKrFONBxIBKMbArEeUQovFfGlaYcOySmCCjpFjeKWXxwRuUANaqjpjUCCFYZUrxyipbzCvwgqYWFmmuelXOFNdoHZZwmXz
    [88] => GXpOALcYwEsvdoGxDUAavjDyFYbPJlEQqfUAFfotrIzgBxIVydugmkHljGiwCgAVpPKEfhuNnVpJfKPbcCoQKTdvMiPiWyTAkJmiSWJSuxKeoJTbfYYlSRdmeAWKPObD
    [89] => mJkFrWREIHUlXVIlKGwoTYYnTelwHqqizmkDyZsKDPgrFHoIFHVFVLcsChEpVKLYRuKjDhccCGoDgwBfEgDMNsHTfALpcPXikbDXSqBCglrwBzmODdsilGbfiUoXzaKi
    [90] => cuNwHLIKqDgnTcwbdyFRXrfeuBbBoHCzZXBwKATnxZFPhPHAwYBOQgphPrLEoduMcoKuMelTrnHOMABQRhGhsryUPhUPusNBxDYDBWMXaKNkdgrlsiqskbohfULHYFuu
    [91] => wgAmGYKJfskWfSyWvQSOVBOdjGwWlpbMVWSNjfPMxRDJmAWKVitvcgwhyFRcraNxUOlTnfvnIiTIZtSyXzlNclsSToClbmqmRmuGRjTBnsCnYjDGINqtLTKaDIBbUwlm
    [92] => rRVnpQhLWIxpGvhefvToCLmPPOkfAYiwPOdNMjZrfLQxNcFGbgPnjaJbROScSfwjkqemZvhdePktEdiXWOoNFVAzGQnDkUHucASvCDiDSCmELxbmODcSbATwEQJwzqWY
    [93] => OzQJGHBBZcANOXOfVYHigMWJyTpltspUrPokwXHfAUbERkodxebLGHTqUdGJBzLuuzkjyxPEowhWPzLkEDlXBfkByvCMjqXMaiWGGdYrvZzFzxxbRlaAcJUCYMsGsyVj
    [94] => pjYbpMDJLTGJqPVEuygGLsqhVJdcpVvZtvnnnabBctrEnFAysNhlHAKhoBZpNctdTGjmnECtykBQBYvEWXQwLlAhHgDeAMURmQayUfApuCQPbCOsYCgUBsIwYqAQJczg
    [95] => TNnkPOpleudhrWCZzJcZDnCxTblKHLzZXRSoFYXBifEIjHDbuzbJiXmGMYOPRlMuKGUyLcLCTXDsYHIGlRLwniwCaIwZSxRqDIsyFzfxjwrGvyOMhuFJcNkdioFFRvLK
    [96] => ltIdbzSOgAmMndbFhegDsjixqNRBoKOsWikzuRvAHnHJetYaZfhYImxftrFkkVyAKvcSmFsRVckWTvcSFlNgdFNCXhWFsjeDbfpGsCUKCsilDMOLgaWARlVigfFqSvFq
    [97] => EvVMWWsgWhCtpfbKxbmDkSzbeQpvVKXevKNmPhXIDHLKNNjixdPGxRciSRwycmEjVaHRrXPcLsrngcnsUgeFkyWGDOzQZDktvIUsYapFmnQRKZcbddLrdvgpLWNtURZK
    [98] => EShgWTQpyZSkLrbGsfYpnuPOzkvQgoGbKxQvLFdFhMfSZBdPyQNGbDjKnqRzFYGaNacVQCDVPrKzfTPOyAXlVsnnpgozdOjdOOoLkYFPTLXlUnCsFmHnsRNLGLdzWHOK
    [99] => UHeGdaUpeTMbqdGHuualRGvMeUMKkGiIGrCLAqGobPbIdmIfnFSYMRmGCJTkxqtuqxSoZRVnBFuUvhEqfCyKVSABxgKEiGyceSsPFPyzDNlVmLvSOWQpqkfjoKwGVihb
)

で、この変数名をアサインするようにencode_id()を以下のように変更。

return $this->var_array[$value];

これで、compressor.phpを実行すると、素敵な、ほぼ暗号のようにも見えるphpのソースが出来上がります♪

例えば、オリジナルのcompressor.phpを処理すると、こんな感じ。

オリジナルのソースはこちら。

php-compressor

<?php class Compressor{static$RESERVED_VARS=array('$GLOBALS'=>1,'$_ENV'=>1,'$_SERVER'=>1,'$_SESSION'=>1,'$_REQUEST'=>1,'$_GET'=>1,'$_POST'=>1,'$_FILES'=>1,'$_COOKIE'=>1,'$HTTP_RAW_POST_DATA'=>1,'$php_errormsg'=>1,'$http_response_header '=>1,'$argc '=>1,'$argv '=>1,'$this'=>1);var$comment=null;var$keep_line_breaks=false;private$tokens=array();function load($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn){$this->add_tokens($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn);}function run(){$this->shrink_var_names();$this->remove_public_modifier();return$this->generate_result();}private function generate_result(){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt="<?php\n";if($this->comment){foreach($this->comment as$HIszhxAbnlVHWdQRsasczZZsAcykpIbPHqrRWjGInhwxoISdXVPdtLzkiKUUzMKnCaSmerDbUcpvguWGVlRmhJUyGFgfpamJQRAALpAsPZuQNkwCMUXCifsxFSsAwzLK){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.="# ".trim($HIszhxAbnlVHWdQRsasczZZsAcykpIbPHqrRWjGInhwxoISdXVPdtLzkiKUUzMKnCaSmerDbUcpvguWGVlRmhJUyGFgfpamJQRAALpAsPZuQNkwCMUXCifsxFSsAwzLK)."\n";}}$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.="# Shrunk with http://code.google.com/p/php-compressor/\n";foreach($this->tokens as$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW){$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[1];if(!strlen($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn))continue;if(preg_match("~^\\w\\w$~",$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt[strlen($EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt)-1].$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn[0]))$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=" ";$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn;}return$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt;}private function remove_public_modifier(){for($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh<count($this->tokens)-1;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++){if($this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh][0]==T_PUBLIC)$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh]=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh+1][1][0]=='$'?array(T_VAR,"var"):array(-1,"");}}private function shrink_var_names(){$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB=array();$MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS=array();for($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh<count($this->tokens);$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++){list($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz,$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn)=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh];if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz!=T_VARIABLE)continue;if(isset(self::$RESERVED_VARS[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]))continue;if($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh>0){$dEerLyZviADomsFuqHzrcQuSRHorjOlwvAjpHsQvPpypXrcjRWmQWuDLrOksnQCZpcMYRMWFGkGlBHhyVjLyEwEXZrCgENQIvjqLWYTnwhlQnTUJXfxQPRinnCvgEqSo=$this->tokens[$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh-1][0];if($dEerLyZviADomsFuqHzrcQuSRHorjOlwvAjpHsQvPpypXrcjRWmQWuDLrOksnQCZpcMYRMWFGkGlBHhyVjLyEwEXZrCgENQIvjqLWYTnwhlQnTUJXfxQPRinnCvgEqSo==T_DOUBLE_COLON)continue;if($this->is_class_scope($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh))continue;}$MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS[]=$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh;if(!isset($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]))$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]=0;$eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB[$yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn]++;}arsort($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB);$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa=array();$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh=0;foreach(array_keys($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB)as$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP){$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa[$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP]=$this->encode_id($rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh);$rPpvUyxpppCLTpQIcmVTLcwObJrNlMIJJMsVTEYOLpdOhdyuNBWCffwhVRaEVuKzeKeszgLnGbGdxaESBNezRTcbyKKKPEQbYFmrHOMLrgQTYAABeAPVcLCGjQbCIyCh++;}unset($eRJJAESCptuptaYuzVoofzIucixkWyhQmiQiGshPhDXUlgwBNNRaSFnEIevxoPOmgptnBXpHaBtbQSRvEwAVWibdWApChgxXVgmNWJyDYiNAcNXMBKjoTnFRgRPkNFlB);foreach($MjjQeBCyyjJDJhCsuLqhrPKCWoofhfzdaXCXLQXklQlxXuvSvIXJiPTUWgXBThsMeFXvotnhQeNIZZGgfqpDqBznwIwEIBKmozJkBDiIoTzOvzLbAcinFPxlbPBPMMMS as$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs){$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP=$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][1];$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][1]='$'.$skzLoXjJURapIIJypvXRrxozFdaGjLdkhvCBUjIMbpIuRkOOCpLYjlpfKMlKkQntfECfqHvYbTxJjRNuyopYAqMdkCwllYdjAglVjWIxZumNbVXkmJScdoIiEOeGRRUa[$fSkHjprjkupDPnwgOOrvwSEUpVeDpRvujBZtKhyEQffWFnSArToGdzSSmEhiIZtGmaXhlJCMpcenlGebmcwHrPWgMwaOFAvbgWPEjmDgFeriayVlJAEEoyQLgEijgrEP];}}private function is_class_scope($kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs){while($kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs--){$QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz=$this->tokens[$kaNusLjYhBLhmFFlCfbbjGkhlchKxTAibSCkGMXUWtIYeLyhMYZpIqCQdxAhefLAFjKHiDZrYLoLNzgkiCJShynVFwooVTdhkyzxFIhsIYyhQjLyUIQhdbASBOKaYhUs][0];if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz==T_CLASS)return true;if($QgrPYJUdEiTsVoJZlXsGcPhoBIEWHkgESJOPhzyfXdxgNSjhMNLnIzWsYsXzbirgrgQnwLXUvDGukIuuedaDzalictEDOUMyilHIZQcRTlvIjmHKbFCIZaanbvBEqPyz==T_FUNCTION)return false;}return false;}private function add_tokens($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn){$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS=token_get_all(trim($yubcBecdGyLuQeNTxjeaQuSsNXQoDsDoHKGdiZColwuoPnoYiyfiTzIeOpRhqMoxIBnwWIRlKPTdCEdZOjNOaybJhKGxqbpyWJkqdYnJhIzyVIKrUBoCySuCBtBQYVmn));if(!count($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS))return;if(is_array($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[0])&&$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[0][0]==T_OPEN_TAG)array_shift($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS);$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig=count($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS)-1;if(is_array($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig])&&$AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS[$iwUcuhXcPNaSuPgDogjIrRdjGgLnJpkecRQUvEhgAoOPtMzldBHJmhkEwUHBjOvudHnPkbVzspLNDdBUmZAhqNQPmmJnsaOLEvMARjsddPuYMEgsQNGSuhOVgOZIwyig][0]==T_CLOSE_TAG)array_pop($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS);$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH=count($this->tokens)?"\n":"";foreach($AAaDvdFUlowLginujFzqEeHkUHUxdJXCpxIgTaWPvfkGQoklYuYVAQjmIoxXTfGxMjIfujjxVzhxzzTDOHyacOthIkAipPaaPTUNaAMnNrzgbCOkYbHfAyTWTOgTROyS as$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW){if(!is_array($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW))$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW=array(-1,$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW);if($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_COMMENT||$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_DOC_COMMENT)continue;if($GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[0]==T_WHITESPACE){$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH.=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW[1];continue;}if($this->keep_line_breaks&&strpos($swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH,"\n")!==false){$this->tokens[]=array(-1,"\n");}$this->tokens[]=$GtaumYbnwQVZsjIdIdaRzlXFxlXHpeuLHXIgMTBxWIkdEcWpBkhrJesWIQfidvNOgKmfpqsVBVmqlenMVlxrHsClNdNmHFKJwEAOcvLdWfLfxivSvWvaAzhQZeSMbnXW;$swEBcZCuykOCKhmzsAXZpLQYrfhXSyDoXjtKNsNlebsFHwaPjxwhPAyulkuxVsyhIRgmbUQMIlUrhqjUCUmIVOucNOGpTRvmgvVjxlqBREnRuvGnOEWAEqmqKWkVnQYH="";}}private function encode_id($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt="";if($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz>52){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz%53);$opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz=floor($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz/53);}while($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz>62){$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz%63);$opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz=floor($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz/63);}$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt.=$this->encode_id_digit($opGMkYLIIBMSdLKOGasKZGHuTQDopuRHbPsLLfgCbhkXqdXqPedfsyLEVbNOKhZcWSNTooEJyQPjzVEXFIAauxhhddTsRGMqfbITngkcSIaxGcTxdyzXIGQwFqypsEhz);return$EyUqGNkSVvswVBrXWGMnhKqIUsOmEZcvKtNwpmsKbzQzwXKjpQRzRFPUvvOqZlAoKQgwVUQNEEmFTVpPscRgUHOVAiYQDJfvMRCVAPAQgRiNlKhQDeytUujuLrVbVOmt;}private function encode_id_digit($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC){if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC<26)return chr(65+$hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC);if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC<52)return chr(71+$hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC);if($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC==52)return"_";return chr($hUekouHWIpnryOBuRSfFlWpichOHsnuffSFtDhVZeJxWlSAejEiBzEKGqWecyArjUkDuKKDPvTcIgcncYCJgSXNQuUlBktosixTNOwrPyLFIZRIIRZIliAchozVsAcvC-5);}}

一行になってしまうので、表示が…。

暇な人は、クリップボードにコピーしてエディタにでも貼り付けて見てみると笑えるかも知れません。

私だったら、ちょっとこのphpソースをメンテしようという気は起きないかなと。

 

で、ついでなので、こいつをunpack()して、更に「,」でimplodeしてあげます。

そうすると更に変態的な文字列へと変化します。

99,108,97,115,115,32,67,111,109,112,114,101,115,115,111,114,123,115,116,97,116,105,99,36,82,69,83,69,82,86,69,68,95,86,65,82,83,61,97,114,114,97,121,40,39,36,71,76,79,66,65,76,83,39,61,62,49,44,39,36,95,69,78,86,39,61,62,49,44,39,36,95,83,69,82,86,69,82,39,61,62,49,44,39,36,95,83,69,83,83,73,79,78,39,61,62,49,44,39,36,95,82,69,81,85,69,83,84,39,61,62,49,44,39,36,95,71,69,84,39,61,62,49,44,39,36,95,80,79,83,84,39,61,62,49,44,39,36,95,70,73,76,69,83,39,61,62,49,44,39,36,95,67,79,79,75,73,69,39,61,62,49,44,39,36,72,84,84,80,95,82,65,87,95,80,79,83,84,95,68,65,84,65,39,61,62,49,44,39,36,112,104,112,95,101,114,114,111,114,109,115,103,39,61,62,49,44,39,36,104,116,116,112,95,114,101,115,112,111,110,115,101,95,104,101,97,100,101,114,32,39,61,62,49,44,39,36,97,114,103,99,32,39,61,62,49,44,39,36,97,114,103,118,32,39,61,62,49,44,39,36,116,104,105,115,39,61,62,49,41,59,118,97,114,36,99,111,109,109,101,110,116,61,110,117,108,108,59,118,97,114,36,107,101,101,112,95,108,105,110,101,95,98,114,101,97,107,115,61,102,97,108,115,101,59,112,114,105,118,97,116,101,36,116,111,107,101,110,115,61,97,114,114,97,121,40,41,59,102,117,110,99,116,105,111,110,32,108,111,97,100,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,123,36,116,104,105,115,45,62,97,100,100,95,116,111,107,101,110,115,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,59,125,102,117,110,99,116,105,111,110,32,114,117,110,40,41,123,36,116,104,105,115,45,62,115,104,114,105,110,107,95,118,97,114,95,110,97,109,101,115,40,41,59,36,116,104,105,115,45,62,114,101,109,111,118,101,95,112,117,98,108,105,99,95,109,111,100,105,102,105,101,114,40,41,59,114,101,116,117,114,110,36,116,104,105,115,45,62,103,101,110,101,114,97,116,101,95,114,101,115,117,108,116,40,41,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,103,101,110,101,114,97,116,101,95,114,101,115,117,108,116,40,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,61,34,60,63,112,104,112,92,110,34,59,105,102,40,36,116,104,105,115,45,62,99,111,109,109,101,110,116,41,123,102,111,114,101,97,99,104,40,36,116,104,105,115,45,62,99,111,109,109,101,110,116,32,97,115,36,87,65,114,79,79,118,70,75,111,112,116,70,112,73,100,76,88,107,68,103,87,87,107,99,84,70,86,99,114,122,87,72,69,112,71,72,118,86,121,67,87,119,82,118,72,104,68,103,83,76,110,119,115,83,73,82,85,99,113,113,107,120,114,89,120,114,71,71,86,105,90,67,107,114,67,108,98,89,97,105,99,67,80,113,66,114,104,66,104,79,76,75,73,115,89,81,117,113,83,82,110,71,114,88,97,74,79,110,97,102,86,88,65,109,105,106,88,81,103,71,88,113,75,100,73,66,72,86,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,35,32,34,46,116,114,105,109,40,36,87,65,114,79,79,118,70,75,111,112,116,70,112,73,100,76,88,107,68,103,87,87,107,99,84,70,86,99,114,122,87,72,69,112,71,72,118,86,121,67,87,119,82,118,72,104,68,103,83,76,110,119,115,83,73,82,85,99,113,113,107,120,114,89,120,114,71,71,86,105,90,67,107,114,67,108,98,89,97,105,99,67,80,113,66,114,104,66,104,79,76,75,73,115,89,81,117,113,83,82,110,71,114,88,97,74,79,110,97,102,86,88,65,109,105,106,88,81,103,71,88,113,75,100,73,66,72,86,41,46,34,92,110,34,59,125,125,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,35,32,83,104,114,117,110,107,32,119,105,116,104,32,104,116,116,112,58,47,47,99,111,100,101,46,103,111,111,103,108,101,46,99,111,109,47,112,47,112,104,112,45,99,111,109,112,114,101,115,115,111,114,47,92,110,34,59,102,111,114,101,97,99,104,40,36,116,104,105,115,45,62,116,111,107,101,110,115,32,97,115,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,123,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,49,93,59,105,102,40,33,115,116,114,108,101,110,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,41,99,111,110,116,105,110,117,101,59,105,102,40,112,114,101,103,95,109,97,116,99,104,40,34,126,94,92,92,119,92,92,119,36,126,34,44,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,91,115,116,114,108,101,110,40,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,41,45,49,93,46,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,91,48,93,41,41,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,34,32,34,59,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,59,125,114,101,116,117,114,110,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,114,101,109,111,118,101,95,112,117,98,108,105,99,95,109,111,100,105,102,105,101,114,40,41,123,102,111,114,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,60,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,45,49,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,41,123,105,102,40,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,91,48,93,61,61,84,95,80,85,66,76,73,67,41,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,49,93,91,49,93,91,48,93,61,61,39,36,39,63,97,114,114,97,121,40,84,95,86,65,82,44,34,118,97,114,34,41,58,97,114,114,97,121,40,45,49,44,34,34,41,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,115,104,114,105,110,107,95,118,97,114,95,110,97,109,101,115,40,41,123,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,61,97,114,114,97,121,40,41,59,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,61,97,114,114,97,121,40,41,59,102,111,114,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,60,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,41,123,108,105,115,116,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,44,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,93,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,33,61,84,95,86,65,82,73,65,66,76,69,41,99,111,110,116,105,110,117,101,59,105,102,40,105,115,115,101,116,40,115,101,108,102,58,58,36,82,69,83,69,82,86,69,68,95,86,65,82,83,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,41,41,99,111,110,116,105,110,117,101,59,105,102,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,62,48,41,123,36,122,107,66,108,118,114,80,87,104,98,81,68,89,79,69,109,66,106,84,100,74,68,113,70,105,100,78,80,114,113,68,97,117,113,109,76,73,84,111,85,75,106,90,100,102,71,74,112,102,83,79,81,107,80,82,68,117,78,77,107,117,87,98,98,113,83,101,103,98,72,84,72,79,121,117,73,104,76,82,70,103,68,65,78,88,108,90,114,86,113,98,98,119,113,114,67,109,69,90,71,105,97,107,118,69,89,113,109,68,122,106,112,106,70,112,112,68,121,108,101,80,82,105,105,106,99,73,84,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,45,49,93,91,48,93,59,105,102,40,36,122,107,66,108,118,114,80,87,104,98,81,68,89,79,69,109,66,106,84,100,74,68,113,70,105,100,78,80,114,113,68,97,117,113,109,76,73,84,111,85,75,106,90,100,102,71,74,112,102,83,79,81,107,80,82,68,117,78,77,107,117,87,98,98,113,83,101,103,98,72,84,72,79,121,117,73,104,76,82,70,103,68,65,78,88,108,90,114,86,113,98,98,119,113,114,67,109,69,90,71,105,97,107,118,69,89,113,109,68,122,106,112,106,70,112,112,68,121,108,101,80,82,105,105,106,99,73,84,61,61,84,95,68,79,85,66,76,69,95,67,79,76,79,78,41,99,111,110,116,105,110,117,101,59,105,102,40,36,116,104,105,115,45,62,105,115,95,99,108,97,115,115,95,115,99,111,112,101,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,41,41,99,111,110,116,105,110,117,101,59,125,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,91,93,61,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,59,105,102,40,33,105,115,115,101,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,41,41,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,61,48,59,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,91,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,93,43,43,59,125,97,114,115,111,114,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,59,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,61,97,114,114,97,121,40,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,61,48,59,102,111,114,101,97,99,104,40,97,114,114,97,121,95,107,101,121,115,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,97,115,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,41,123,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,91,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,93,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,40,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,41,59,36,115,87,67,79,82,117,111,111,120,116,66,76,107,75,99,115,68,100,84,70,72,66,81,72,67,119,69,69,107,111,122,106,68,68,100,85,82,66,88,73,76,66,113,79,68,108,87,84,118,85,115,110,78,106,117,78,73,107,65,105,99,119,90,117,108,73,82,72,87,71,117,66,120,71,89,106,75,78,121,68,109,112,67,73,107,109,74,111,110,104,118,112,118,76,114,101,76,77,120,90,122,122,84,104,100,86,106,66,68,122,85,89,111,116,98,99,68,116,120,98,79,113,80,75,100,69,70,119,43,43,59,125,117,110,115,101,116,40,36,72,88,112,108,113,80,86,85,77,85,67,122,79,99,121,121,106,105,69,88,103,74,90,118,119,85,98,80,113,106,84,113,66,71,68,65,107,84,71,121,112,81,71,121,105,99,76,71,73,101,77,105,79,69,75,74,115,111,98,85,97,67,99,97,118,87,78,113,80,102,76,104,75,83,73,82,90,115,113,67,69,101,67,97,74,86,86,118,119,108,88,81,118,71,120,115,115,112,79,90,69,104,97,86,101,116,101,99,88,89,99,68,74,120,98,86,90,75,106,85,80,116,101,67,72,112,74,79,41,59,102,111,114,101,97,99,104,40,36,71,103,85,113,117,89,87,103,85,98,67,100,118,111,116,101,79,76,69,79,90,121,80,66,90,84,115,82,87,87,75,109,88,121,104,102,90,120,85,107,109,85,78,86,118,70,110,98,89,118,74,104,99,104,71,104,90,114,70,100,102,98,116,90,120,71,104,110,108,110,98,65,73,72,117,107,107,109,81,114,105,122,103,66,102,66,88,86,113,100,77,106,106,73,117,73,72,74,111,110,111,99,111,84,79,105,113,88,85,119,69,105,106,100,84,69,106,80,97,117,84,84,106,84,77,114,67,122,32,97,115,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,41,123,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,49,93,59,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,49,93,61,39,36,39,46,36,120,99,85,70,78,85,117,108,118,121,122,105,66,103,97,68,86,117,101,71,115,112,116,83,72,115,74,89,76,82,122,89,83,84,86,68,112,106,74,74,83,71,97,81,122,77,111,78,112,117,84,68,108,97,90,103,99,106,120,73,115,103,115,101,120,66,78,107,89,69,105,79,68,99,116,101,122,78,73,70,82,104,98,102,111,90,90,109,117,116,106,71,113,78,99,119,120,112,78,99,90,120,114,74,120,115,89,104,101,88,120,79,87,121,87,73,79,77,106,83,83,97,113,85,71,83,121,74,91,36,119,98,67,67,118,121,99,76,78,112,109,66,118,71,118,90,113,69,90,99,106,113,117,121,68,98,80,74,117,66,116,114,120,90,83,105,82,117,110,108,77,68,112,85,87,83,119,75,110,70,89,74,89,114,121,105,85,99,119,66,89,118,69,71,68,69,70,117,113,102,101,118,107,99,119,82,85,71,111,99,113,106,69,122,102,99,113,71,84,110,97,75,117,103,90,106,108,82,101,67,113,103,85,78,107,83,120,88,110,79,66,98,78,76,78,112,113,67,86,68,113,65,116,80,101,88,102,89,93,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,105,115,95,99,108,97,115,115,95,115,99,111,112,101,40,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,41,123,119,104,105,108,101,40,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,45,45,41,123,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,36,116,104,105,115,45,62,116,111,107,101,110,115,91,36,101,119,107,67,119,99,103,107,71,72,110,99,86,88,110,108,104,87,119,110,76,68,98,115,70,118,106,101,115,67,69,79,66,115,86,102,105,112,81,117,71,67,110,75,82,117,122,113,101,97,102,119,118,106,90,88,106,73,76,75,68,90,80,66,72,109,109,112,79,110,117,117,114,109,117,121,120,121,85,106,114,109,97,69,87,121,103,103,76,80,73,85,108,90,121,111,76,117,86,71,75,115,82,106,121,108,73,110,75,81,78,115,99,65,119,114,81,118,75,101,89,109,74,89,68,118,104,105,93,91,48,93,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,61,84,95,67,76,65,83,83,41,114,101,116,117,114,110,32,116,114,117,101,59,105,102,40,36,66,66,65,74,72,118,84,73,109,107,75,72,111,75,85,73,122,66,122,89,113,100,65,103,86,118,70,102,89,107,66,101,112,84,120,80,106,69,89,107,80,73,112,122,81,112,68,119,119,107,87,103,74,88,111,97,115,70,72,72,69,104,70,111,117,107,90,90,106,103,89,100,84,80,69,100,74,100,74,83,111,89,66,115,110,102,72,81,110,66,118,114,74,86,101,98,108,115,102,101,89,65,81,109,117,65,84,79,100,116,89,90,66,100,68,100,101,122,118,106,67,71,66,103,67,79,78,69,61,61,84,95,70,85,78,67,84,73,79,78,41,114,101,116,117,114,110,32,102,97,108,115,101,59,125,114,101,116,117,114,110,32,102,97,108,115,101,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,97,100,100,95,116,111,107,101,110,115,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,123,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,61,116,111,107,101,110,95,103,101,116,95,97,108,108,40,116,114,105,109,40,36,69,78,69,77,74,115,116,109,66,100,85,118,97,105,79,119,65,115,114,84,80,68,69,102,115,102,122,86,104,81,116,74,99,109,106,112,67,101,74,80,75,102,81,117,105,84,118,68,71,119,69,101,87,120,82,90,108,111,113,86,89,109,67,71,98,73,83,82,66,103,111,111,75,109,107,108,112,79,75,101,109,69,112,111,119,82,72,115,107,122,81,79,102,84,120,72,86,117,107,65,106,117,79,70,104,82,75,81,98,83,108,102,70,102,115,113,71,107,87,65,70,75,84,83,113,83,108,102,41,41,59,105,102,40,33,99,111,117,110,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,41,114,101,116,117,114,110,59,105,102,40,105,115,95,97,114,114,97,121,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,48,93,41,38,38,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,48,93,91,48,93,61,61,84,95,79,80,69,78,95,84,65,71,41,97,114,114,97,121,95,115,104,105,102,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,59,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,61,99,111,117,110,116,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,45,49,59,105,102,40,105,115,95,97,114,114,97,121,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,93,41,38,38,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,91,36,69,87,66,113,68,111,118,87,80,97,103,109,75,111,102,98,68,82,121,117,86,66,87,79,88,72,116,100,84,66,100,83,77,89,65,107,81,97,109,72,114,75,115,84,86,66,83,108,73,119,75,77,108,81,118,83,88,117,122,87,75,119,70,87,90,108,75,83,71,87,74,102,65,97,109,87,105,87,71,97,77,105,107,104,81,86,84,87,71,99,102,86,87,102,66,120,111,102,113,114,73,81,89,108,80,107,101,104,68,115,118,68,120,77,81,71,112,102,83,99,74,113,90,106,81,120,87,76,93,91,48,93,61,61,84,95,67,76,79,83,69,95,84,65,71,41,97,114,114,97,121,95,112,111,112,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,41,59,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,61,99,111,117,110,116,40,36,116,104,105,115,45,62,116,111,107,101,110,115,41,63,34,92,110,34,58,34,34,59,102,111,114,101,97,99,104,40,36,78,119,103,86,104,68,80,121,82,86,83,97,67,99,113,102,84,87,111,82,119,117,115,98,119,81,110,81,82,98,122,108,70,99,70,119,113,111,112,101,114,89,120,121,75,108,76,110,77,122,83,78,110,72,78,67,81,72,89,70,87,110,99,90,100,99,116,122,102,120,105,110,99,116,69,81,72,68,103,120,75,73,65,104,76,68,113,112,75,86,119,107,78,86,99,74,88,90,110,107,72,68,120,105,66,86,90,113,65,66,102,71,112,71,106,118,111,98,116,89,99,90,78,110,101,107,75,74,32,97,115,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,123,105,102,40,33,105,115,95,97,114,114,97,121,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,41,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,61,97,114,114,97,121,40,45,49,44,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,41,59,105,102,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,67,79,77,77,69,78,84,124,124,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,68,79,67,95,67,79,77,77,69,78,84,41,99,111,110,116,105,110,117,101,59,105,102,40,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,48,93,61,61,84,95,87,72,73,84,69,83,80,65,67,69,41,123,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,46,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,91,49,93,59,99,111,110,116,105,110,117,101,59,125,105,102,40,36,116,104,105,115,45,62,107,101,101,112,95,108,105,110,101,95,98,114,101,97,107,115,38,38,115,116,114,112,111,115,40,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,44,34,92,110,34,41,33,61,61,102,97,108,115,101,41,123,36,116,104,105,115,45,62,116,111,107,101,110,115,91,93,61,97,114,114,97,121,40,45,49,44,34,92,110,34,41,59,125,36,116,104,105,115,45,62,116,111,107,101,110,115,91,93,61,36,67,75,115,79,99,74,79,101,121,104,109,102,119,115,113,72,81,81,83,76,99,116,76,108,106,85,105,76,97,114,83,119,71,109,88,104,88,76,119,99,89,75,104,121,89,97,74,99,112,121,69,83,87,106,65,82,117,98,105,71,102,87,68,99,68,98,90,114,113,97,74,70,119,68,68,66,109,72,70,79,82,79,104,74,110,66,80,73,107,73,76,110,76,79,90,89,105,69,117,108,84,122,90,113,75,105,101,115,108,109,78,112,70,84,99,119,104,107,120,90,77,72,104,72,88,66,81,106,59,36,69,87,78,113,71,97,71,68,97,112,117,90,112,101,90,76,102,119,77,109,71,113,120,77,119,83,102,90,75,67,79,118,65,83,75,88,99,101,89,101,78,86,113,113,100,97,103,70,84,121,119,75,70,67,117,119,109,75,99,67,122,71,70,98,103,89,71,106,99,71,114,98,111,106,99,117,78,84,104,122,118,83,112,82,103,108,67,73,105,122,85,104,119,107,73,76,77,112,99,74,70,117,78,119,115,114,108,119,107,71,106,98,109,88,121,106,97,114,90,79,65,121,76,114,113,120,106,104,61,34,34,59,125,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,101,110,99,111,100,101,95,105,100,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,61,34,34,59,105,102,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,62,53,50,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,37,53,51,41,59,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,61,102,108,111,111,114,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,47,53,51,41,59,125,119,104,105,108,101,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,62,54,50,41,123,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,37,54,51,41,59,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,61,102,108,111,111,114,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,47,54,51,41,59,125,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,46,61,36,116,104,105,115,45,62,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,85,108,90,115,90,98,83,90,101,111,117,98,104,79,113,66,118,68,99,77,90,106,76,79,72,105,118,108,118,120,89,106,121,122,105,85,109,74,72,109,116,100,115,70,83,118,103,75,113,90,89,65,104,97,120,81,82,68,114,75,112,113,79,85,76,68,65,87,103,83,105,103,104,114,67,121,115,71,66,81,70,113,104,74,97,83,121,86,76,75,84,104,76,118,68,97,111,107,104,85,99,89,119,122,82,111,86,72,66,88,103,110,88,119,84,81,89,118,122,122,106,73,68,79,120,121,112,114,41,59,114,101,116,117,114,110,36,118,76,101,121,67,78,65,80,107,113,118,77,88,115,68,72,87,108,100,99,117,108,71,110,99,85,98,89,88,69,80,70,77,73,103,117,72,105,87,118,69,114,97,100,77,72,116,77,106,84,107,114,117,75,98,66,119,102,77,65,101,115,118,102,66,68,119,115,115,65,104,81,76,117,122,82,109,99,87,66,114,112,83,81,88,97,100,105,87,120,89,89,101,110,111,118,89,118,76,73,108,105,115,88,82,99,70,98,83,97,120,118,109,78,106,85,98,122,107,121,110,118,76,100,114,108,97,70,59,125,112,114,105,118,97,116,101,32,102,117,110,99,116,105,111,110,32,101,110,99,111,100,101,95,105,100,95,100,105,103,105,116,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,123,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,60,50,54,41,114,101,116,117,114,110,32,99,104,114,40,54,53,43,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,59,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,60,53,50,41,114,101,116,117,114,110,32,99,104,114,40,55,49,43,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,41,59,105,102,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,61,61,53,50,41,114,101,116,117,114,110,34,95,34,59,114,101,116,117,114,110,32,99,104,114,40,36,86,98,112,81,89,83,72,69,78,81,76,79,90,72,73,73,99,109,69,84,109,90,122,81,85,70,76,73,90,69,84,102,122,116,118,111,118,117,81,112,117,66,115,111,118,103,107,102,71,86,120,102,102,105,81,109,106,68,118,73,84,66,89,79,76,122,116,81,77,73,82,103,74,97,119,82,102,76,120,80,100,113,66,90,89,77,83,84,89,106,121,75,113,104,105,77,82,101,84,65,101,107,73,84,68,111,114,99,116,106,67,108,65,114,86,87,114,83,82,79,81,106,73,103,104,69,88,83,45,53,41,59,125,125

 

別にカンマ区切りにする必要もない、数字なので、ゼロ埋めして全部三桁にしてしまえば、数字だけの親プログラムが完成ですw

これもコピーしてエディタに貼り付けてみると、完全にphpのプログラムには見えません。

当然、呼び出し側のプログラムでpach()してeval()するので、phpという事は分かってしまうのですが、まぁそれでも多少は笑えるかなと。

 

今後、この内容がどこで活かされるのか謎ですが、こういう事を考えるのは結構好きだったりするので良しとしますw

 

phpの秘匿要望における難読化・暗号化についての考察

phpをやり始めてから付き纏う問題で、ソースの暗号化や難読化についての話題があります。

結論から言うと、完全にプログラムの内容を秘匿する事ってのは出来ないんですが、まぁいろいろと前提条件有りでの秘匿化ツールというものが出回っているようです。

ただ、秘匿化するという事は自分とこのサーバに置けないという事であり、客先のサーバに置きたいから秘匿化したいのであり、そうなるといろいろと制約があり、「これをインストールしてください。」とは、なかなか言えない状況というのが大半ではないかと思われるのでありますです。

なので、「出来る限り」の難読化というのが関の山なんですが、今回ちょっとphpにおける難読化っつーものをやってみたので、日記してみます。

まず、「難読化」の方です。

基本的に行うのは、変数名や関数名を無意味な文字列に置き換えてしまうというもの。それと改行だとかコメントだとかを排除して、視覚的に読みにくくするという感じ。

いろいろとツールがあるようですが、今回はフリーという事もあり、Compressor.phpというのを使ってみました。

まぁド定番なんですかね。いろいろな所でオススメされているようです。

で、使い方も簡単なら、結果も単純という感じで、上記に書いたような変数名・関数名の変換とか改行・空白・コメントの排除をザザッとやってくれるだけ、みたいな。

 

require "compressor.php";
    
$c = new Compressor;

$c->keep_line_breaks = false;

$c->load(file_get_contents("hoge.php"));           
file_put_contents("hoge_comp.php", $c->run());

 

一つ気づいたのが、argvとかのコマンドライン引数については正常に判定してくれないみたい。これも適当な変数名に変換されてしまうので、後から手動で修正する必要がある。

あと、evalとかで変数名を文字列として記述すると、そいつは変換してくれない。

eval後にその変数を利用する場合は、これも手動で修正する必要がある。

まぁ、大した問題ではないかも知れない。そんなに巨大なプログラムを難読化するって事も無いと思うので。

 

で、出来上がったプログラムを見てみたんだが、普通に読める。

まぁ確かに読みにくくはなっているが、普通にphpやってる人なら;を改行入りで置換するとかやれば、何をやっているかは分かるレベルですね。

なんか、もうこの辺でそもそもphpで秘匿するっていう事自体が間違っているという事実を受け入れざるをえない心境になってきます。

Compressor.phpでできるのは、この程度って感じですね。

 

で、ここで終わっちゃうと、プログラム内にある定数的な固定の文字列とかが丸見えなので、焼け石に水ですが、暗号化してみます。

まぁ、暗号化の方はバリエーション豊富ですね。いろいろな方法があるようです。

ただ、言うまでもなく可逆暗号化でなければなりません。

そうなると、mcrypt_genericとか、openssl_encryptとかPEAR::Crypt_Blowfishとかでしょうか。

いずれにしても、keyとなる秘密鍵情報を保持する必要があり、それについてはベタ書きとなるので、あんまり意味が無い感じです。

まぁそもそもphpにおいては暗号化自体が難読化とほぼ同義なんだが…。

 

で、今回は上記関数ではなく、unpack、pack関数によるバイナリ文字列での暗号化?をやってみました。

暗号化というか、普通の文字列置換的な感じですね。

 

$data = file_get_contents("hoge_comp.php");
$unpack_data = unpack("C*",$data);

print_r(implode(",",$unpack_data));

 

これなら、openssl_encryptとかの方が幾分マシなような気もしないでも無いが…、とりあえずこれで、ズラ~っと数字をカンマ区切りにした文字列が出来上がります。

Compressor.phpで難読化して、それを更にunpack関数で無意味なカンマ区切りの数字の羅列に変換するという感じ。

で、実行するときは、別にこの文字列をパースするphpファイルを用意して、packしつつ、その結果をevalする事で、動作させると。

 

要するに、最終的にはプログラムの内容は見られてしまうんだけど、出来るだけその意欲を削ぐ。という感じですね。

 

なんか、ものすごい徒労感が激しい作業ですが、素直にOCamlとかのコンパイル言語を習得した方が早いような気もする今日このごろであります。

【腱鞘炎対策】LOGICOOL ワイヤレストラックボール M570t

プログラマの職業病として肩こり腰痛、または肥満などが代表的だが、私にはどちらも無い代わりに腱鞘炎になりそうなくらいに手首が痛い。日常的に痛い。マウス使う使わないに関わらず痛い。

マウス持つ時に、こうどうしても右手を内側に捻る必要があり、手首を支点にして動かすので体重がかかるのかな。すごく痛い。

で、長年我慢してたんだが、最近また痛くなってきて作業にも支障が出るし、もう我慢する年齢でもないだろうという事で何か良いマウスは無いかと探していたら、まぁありますね。

amazonでも高評価なコレ。

確か、mirra氏が昔に推薦していたような…。

どこかで見たことがあるなぁと思ったら、隣に座っている人が使っていた…。

という事で、やっぱり良いものなのかも!?

で、早速購入。翌日届いたので使ってみた。

2014-08-22 13.14.10

男のくせに手が女性並みに小さいので、コイツはちょっと私には大きい。ホイールまで指が届かなくて、人差し指で回すのか中指で回すのか迷うレベル。

トラックボールは親指で操作するのだと思うが、これがまた慣れないと細かい動きが難しい。

ただ、手首の痛みはウソみたいに無くなった。まぁ動かしてないので当たり前なのかも知れないが。

 

とりあえず、慣れが必要ですな…何事も。

メールサーバの設定も…慣れが必要なようだ…。

 

不要になったパソコンを無料回収・無料廃棄してくれる【PCリサイクル プラスワン】は最高!

今の事務所に移って3年になるけど、固定電話にかかってくる電話はほぼ100%の確立でセールスとか人材派遣とかマンション経営とか、もうこっちも忙しい時間にかかってくると貴重な時間を強引に奪われているようで有無をいわさずガチャ切りばかり。

しかし、先日初めて有用な電話がかかってきた。
なんと、PC、周辺機器、特定の家電などを壊れていてもOKで無料で引き取ってくるれるとの事。
最初は疑心暗鬼状態で、しつこく「実は金がかかるのでは?」と聞いていたんだが、まぁ完全に無料との事なので、大量に溜まっていたパソコンや周辺機器やパーツや家電を引き取ってもらうことにした。

翌日すぐに引き取りに来て、ダンボールに入れた細かいパーツだとか、もう使っていないまま10年以上も保管していた沢山のパーツを引き取ってもらった。
さすがにリサイクル料金のかかるであろうブラウン管のテレビは無理との事だったが、事務所マンションの玄関先で引き取ってくれて、自分で搬出する必要も無く、かなり助かった。
こちらの方が何度もお礼を言って、引き取ってもらった。

で、今後も何か不要なPC・周辺機器などがあったら連絡下さいとの事。
関西の会社らしいが、月に一度は東京なども巡回しているらしい。

これはすごい会社だなぁと。潰れずに長く存続して欲しい。
という事で、ここで勝手に宣伝させて頂く。

不要になったパソコンを無料回収・無料廃棄【PCリサイクル プラスワン】

担当者の対応も気さく・丁寧で好感度大である。

でもって、昨日はメールサーバをゴニョゴニョやってた。
最終的には既存のメールサーバにバーチャルドメイン・メールボックスを追加して、送受信ができるように。という知っている人からすれば、簡単なオーダーなんだが、なんせ

メールサーバ ド素人なもので

いきなり設定を変更してpostfixをreloadするとか怖いので、とりあえず自分のアカウント作って送受信できるようにして確認できるようにしてから…とか考えて、とりあえずとりあえずThunderbirdにアカウント追加して、とりあえずとりあえずとりあえずメールの受信はできるようになった。

で、そのアカウントからメールを送信しようとしたら、いろいろメッセージが出てきて、なんだこれはー!みたいな。

で、main.cfやmaillogとにらめっこしながら睡魔と格闘しつつ、いろいろな設定ファイルを見てみたが分からず。

で、もう今日は諦めて帰るかー、とコンソール画面閉じて帰る準備してる時に、ちょっとThunderbird側のSMTPサーバの設定見てみるかと開いたら見事に「セキュリティと認証」の部分が違ってて、2箇所設定を変更したらあっさり送信された…。

もうここに書くようなレベルの話しでも無いのだが、いつになってもこういう「なんで動かないのかなー、おかしいなぁ」という事に限って、全然ややこしくも何とも無く、ちょっとした設定の違いとか、下らない凡ミスが原因とかっていう事が無くならない。心底凹む。

さーて、今日もがんばろう。

がんばろう…。

SSL証明書のエクスポート 秘密キーがエクスポートできない場合の対処法

SSL証明書を”とある事情で”エクスポートする際に、エクスポート不可能フラグが立てられていて秘密キーがエクスポートできない場合がある。

export

よくあるのは銀行系の証明書で他のマシンでもログインしたいのに!

って感じなんでしょうか。windows標準の機能とかでは「もうマジ無理」って感じなんですが、いろいろ探していたらやっぱりありました。

Jailbreak

名前がもう危険な匂いしてますが、アメリカのセキュリティ企業との事なので大丈夫だと思いますが、もし誰か以下を実行する場合は完全に自己責任でお願いします。

 

秘密キーがエクスポートできて、IEからpfxでエクスポート出来るなら、何の問題も無い。

pemに変換とかも、opensslで簡単楽ちん。linuxマシンで

openssl pkcs12 -in <file.pfx> -out <out.pem>

てな感じでしょうか。

 

で、秘密キーのエクスポートが不可だと、pfxではエクスポートできず、p7bとかになってしまう。

そこでJailbreakとなるわけです。

 

操作は簡単。

上のサイトからJailbreakをダウンロード。

インストールとかは必要なく、コマンドプロンプトから以下を実行するだけ。

まずは、マシンにインストールされている証明書の一覧を見ますよ。

C:\Users\hogeuser\Downloads>jbstore.exe -l

Listing certificates in USER store

Subject Name: <発行先の名前>
Serial Number: d9 h9 fe cd fh 6s ee 1f 0d 19 ea b9 ac af 23 5a

Subject Name: <発行先の名前>
Serial Number: d6 dg 7h s6 6a 06 b6 7e 83 86 0s 1d 9g a2 f4 h3

ズラーっと出てきます。

ちなみに、オプションは以下

Usage:
jbstore <action> <options>
Actions:
-l List all certificates
-a Dump all certificates
-1 Dump one certificate
Options:
-s <store> Cerificate store, "SYSTEM" or "USER" (default is "USER")
-p <password> Password (default is "password"
-o <file name> Output file (default is "out.pfx"
-n <subject name> Subject name to use when dumping one cerificate
Example:
jbstore -l -s "USER"
jbstore -d -o foo.pfx -p foo
jbstore -1 n "iSEC User"

で、エクスポートしたい証明書のSubject Nameを指定して以下を実行。

C:\Users\hogeuser\Downloads>jbstore.exe -1 -n "Subject Name" -p "password"

Subject Nameとか、ちゃんと””で囲わないとエラーになるようです。

また、-pでパスワードを指定しない場合はデフォルトで「password」がパスワードとなるようです。

これは他マシンに移動して使う場合とかに必要になるので、控える&デフォルトでの運用はやめよう、という事ですな。

 

で、これだけで終了。

jailbreak.exeを置いたディレクトリにout.pfxが出来ております。

秘密キーがエクスポートできなくて苦労していたら、きっとpfxの拡張子が燦然と輝いて見えることでしょうw

なんか、秘密キーを取得する完全バックアップツールとかあるようですが、勢いで買わなくて良かった…。

symfony2 コマンドからのメール送信

なんか、最近はsymfony2ばっかりです。

米蔵です。

 

今日、お勉強になったのは、コマンドライン(cron)からメールを送信。

です。

 

cronで処理した結果をメール送信という、よくある処理なんだが、画面から実行すると送信されるのに、なぜかcronからの処理だと送信されません。

symfony2のソースを追うこともなく、迷わずググる。

どうやらコマンドからのメール送信は、いろいろやらんとダメらしい。

ただ、何故か分からんが情報少ないなぁ。

で、試した中で上手くいったのが以下のサイト。

[PHP]SwiftMailerを使ってメール送信する

 

助かりましたー。

しかし、画面からとコマンドからの挙動が違うってのは、どうなんすかね?symfony2。

トラックポイント交換

愛用しております、Lenoboのthinkpad X1 carbonですが、トラックポイントが「ソフトドームキャップ」というヤツで、どうにも気に入りません。

ツルツル滑るので、慣れるまで時間がかかりました。というか諦めておりましたが、先日のmirra氏との雑談(という名の打ち合わせ)で、旧型(クラシック・ドーム)のトラックポイントがamazonで購入できるとの事で、早速ポチリました。

 

で、届いたのがコレ。

2014-04-25 12.12.04

懐かしい感じが、そこはかとなく漂っております。

思えばthinkpadを使い続けて早十数年です。

早速、交換してみます。

まずは交換前。

2014-04-25 12.12.26

 

見た目はいいんだが、ゴムが滑って慣れない頃はイライラしておりました。

で、交換するとこんな感じ。

2014-04-25 12.12.45

一気に、旧型thinkpadのような、どことなく古臭くなった気がするのが不思議です。

で、操作性はというと、このざらついた感触が滑りを無くして、軽い力でマウスカーソルが動くので操作感アップアップです。

こんなただの赤いキャップが10個で1300円もするのには、それなりの訳があるんですね。

かなり考えて作られてるなぁと。

なんで、あんなツルツル滑るものになったのか、不思議で仕方ありませんね。

ただ、耐久性に劣るようで、確かに使い続けると汚れるし、このザラザラ感が無くなっていくとの事で、ある程度使ってヘタれてきたら交換するのが前提という事みたいです。

まぁしかし、それも許せる感じがします。

という事で、ほぼ誰のためにもならない「トラックポイント交換やってみたの巻」、でした。

[CakePHP]Xformjpで継承エラー

ユーザー登録画面で確認画面を用意したかったので、便利そうな

この辺を使って見ることに。

ダウンロードしてきたファイルを解凍して

app/Plugin/Xform/
app/Plugin/Cakeplus/

それぞれこの下に設置。

app/Config/bootstrap.phpに

CakePlugin::load('Xform');
CakePlugin::load('Cakeplus');

を追記。
コントローラに
public $helpers = array('form', 'Xform.Xformjp', 'Cakeplus.Formhidden');

で、とりあえず表示させてみると、エラーが…ヾ(゚Д゚ )ォィォィ

Strict (2048): Declaration of XformHelper::checkbox() should be compatible with FormHelper::checkbox($fieldName, $options = Array) [APP/Plugin/Xform/View/Helper/XformHelper.php, line 441]
Strict (2048): Declaration of XformHelper::radio() should be compatible with FormHelper::radio($fieldName, $options = Array, $attributes = Array) [APP/Plugin/Xform/View/Helper/XformHelper.php, line 441]
Strict (2048): Declaration of XformHelper::textarea() should be compatible with FormHelper::textarea($fieldName, $options = Array) [APP/Plugin/Xform/View/Helper/XformHelper.php, line 441]
Strict (2048): Declaration of XformHelper::select() should be compatible with FormHelper::select($fieldName, $options = Array, $attributes = Array) [APP/Plugin/Xform/View/Helper/XformHelper.php, line 441]

継承する時の引数が一致してないと駄目的な。

参考:PHP E_STRICTで表示されるエラーメッセージを調べてみた

なので、
XformHelper.phpの中の該当するfunctionに$options = null的に追記。
ググっても同様のケースが見つからないため、根本的な解決になってないかもだが、とりあえずエラーは消えた。\(-o-)/

iphone chromeのtarget=”_blank”で大ハマリ

何を今更そんな事をという感じでしょうが、さっぱり分からんので恒例の備忘録。

やりたかった事は普通にボタン押してリンクするだけのものなんだが、なぜかiphoneに入れてるchromeでだけ、思ったように動いてくれない。

<form action="http://yonezo.biz" method="GET" target="_blank">
<input type="submit" value="target=_blank" />
</form>

単純に別画面出して遷移するだけです。
これがなんでか、別画面でなく自画面で遷移する。

で、aタグでやってみると。

<a href="http://google.com" target="_blank">google.com</a>

普通に別画面で遷移する。
えーと、formでtarget=”_blank”ってダメなんだっけ???
で同じiphoneにあるSafariではどちらも別画面で遷移する。

うーん…。

【今更】VMWare+CentOS6【定番】

先日、訳あって作業ノートPCにVMWare+CentOS6をインストールした。
LAMPのセットアップは毎回「久しぶり」の作業となるので、毎回同じような所で立ち止まってしまう。
当然だが、いろいろなサイトを参考にさせて頂きながら導入したんだけど、 当たり前のように素直には行かず、今回もまた備忘録を残しておく。

【主な躓きpoint】

  1. CentOSをインストールしようとしたらエラー。
    Intel VT-x 拡張ってやつのせいだった。
    参考:19.7. BIOS で Intel VT-x と AMD-V の仮想化ハードウェア拡張を有効にする
    BIOSで有効にしてあげて、再インストールしたら成功。
    つか、今のインストーラって完全自動化で、ほぼ何もせずに完了する。(パスワードのセットくらい)
    VMWare上でインストールしてるからなのかな?
  2. CentOS日本語化
    ヘタレなのでGUIも使います。 おまけに日本語で使いたいのです。
    参考:Linux PC World 日本語環境にする
  3. Windows側(ホストOS)からVMWare上のCentOSへブラウザからアクセスしようとしても、アクセスできない。
    SSHは繋がるんですよ。ゲスト側からのpingも通る。 原因はiptablesでした。
    ポート80番は初期設定では閉じているらしい。
    なので、
    vi /etc/sysconfig/iptables

    -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
    を追加して
    /etc/rc.d/init.d/iptables restart

    /var/www/html/index.html
    が見れるようになりました。
    参考:VMware PlayerにCentOS導入。練習用Webサーバーを構築4
  4. yumのリポジトリ追加
    CentOS6.4にEPEL,RepoForge,Remiリポジトリの追加 からの~phpmyadminインストール。
    yum –enablerepo=epel install -y phpMyAdmin php-mysql php-mcrypt
    でもって、
    /etc/httpd/conf.d/phpMyAdmin.conf
    が自動で出来ているので、ここに
    Allow from 192.168.11.
    とかを追加だ。
    mysql側の設定を完了すれば「http://hoge.com/phpmyadmin/」とかで見れるようになると思いがちなので注意しなくては、である。
  5. 諸々yumする
    yum -y install expect
    mkpasswd -l 46がしたいので、理由は言わずもがな。
  6. phpmyadminを開くと4.0.9へアップグレードした方がいいぜとの事なので、
    yum –enablerepo=remi update phpmyadmin
    で目出度く最新へ。

なんか、徐々に備忘録というか手順書になってきてしまったが…。

そしてこういう技術ネタを書いて毎回思うのは、

これで俺の技術レベルが丸裸(痛

だからあんまりこういうネタは書きたくない→いつまでも向上しない。のループなんだよなぁ…。
さて、問題はこれからなんだ。

追記:

VMWareをインストールしてCentOS入れて、Symfonyを入れた所まではOK。

ただ、マニュアル通りにhttp://localhost/Symfony/web/config.phpへアクセスしても、403になってしまう。
当然、パーミッションには問題無い事を確認済み。
apacheのログにも残っているので、アクセスは出来ている。
なんだろうなぁと思ったらSE-Linuxでした。

vi /etc/selinux/config

SELINUX=disabled
にして、再起動。
目出度く表示されましたー。