Repository: Henryhaohao/Wenshu_Spider
Branch: master
Commit: 5b5ec14febb7
Files: 16
Total size: 161.7 KB
Directory structure:
gitextract_f9jb1u45/
├── .gitattributes
├── LICENSE
├── README.md
└── Wenshu_Project/
├── Wenshu/
│ ├── __init__.py
│ ├── cmdline.py
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders/
│ ├── __init__.py
│ ├── get_docid.js
│ ├── get_vl5x.js
│ └── wenshu.py
├── __init__.py
├── requirements.txt
└── scrapy.cfg
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.js linguist-language=python
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2018 Henryhaohao
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
Scrapy框架爬取中国裁判文书网案件数据 
===========================
    
### 中国裁判文书网 - http://wenshu.court.gov.cn/
|Author|:sunglasses:Henryhaohao:sunglasses:|
|---|---
|Email|:hearts:1073064953@qq.com:hearts:
****
## :dolphin:声明
### 软件均仅用于学习交流,请勿用于任何商业用途!感谢大家!
## :dolphin:介绍
### 该项目为Scrapy框架爬取[中国裁判文书网](http://wenshu.court.gov.cn/)案件数据(2018-10-20最新版)
- 项目文件: Wenshu_Project
- 运行须知:
> **数据库配置** : 运行前根据自己需要修改settings.py中的MongoDB数据库的配置
> **反爬问题** : 由于文书网的反爬监控很严格(一级验证码,二级验证码,JavaScript反爬,IP检测...),所有采用[阿布云动态隧道代理](https://www.abuyun.com/)方案,每一次request请求都是不同的IP,这样就不会触发反爬检测了~:sunglasses:。还是挺好用的,基本上每个IP都可以用,主要也还方便,直接用它的代理服务器发出请求,不用像一般的代理IP那样还需要取出IP,再代入IP进行请求。代理相关配置在middlewares.py的类ProxyMiddleware中。
> **爬取策略问题** : 现在的文书网总量已经高达5千多万份了,但是每个筛选条件下只能查看20页,每页10条。本项目以爬取1996-2000年的所有文书为例,大家有好的爬取方案,可以自行修改Param参数即可。
> **速度问题** : 配置在setting.py中:DOWNLOAD_DELAY = 0(无delay实现请求0延时);CONCURRENT_REQUESTS_PER_SPIDER = 5 (开启线程数为5);因为我用的代理配置是默认的每秒5个请求数,所以在此设置线程数为5;如果想爬取更快,可以加大代理请求数(当然是要money滴~),最高可以加到100的请求数,我滴天呀,那得多快啊!我现在的速度大概每秒爬取4个案件,加到100的话,估计每秒80个,一分钟4800个,一小时288000,一天就是6912000,目前总量5千4百万,大概8~9天就能爬完,如果在加上redis分布式的话,哇,不敢想象!:yum:
## :dolphin:运行环境
- **Version: Python3**
- **JS解析环境: Nodejs**
有不少小伙伴向我反映运行后报错:execjs._exceptions.ProgramError: TypeError: 'key' 为 null 或不是对象
解决方案如下:
如果pyexecjs包没问题的话,那就是没有安装nodejs的问题; 因为你没有安装nodejs的话默认js解析环境是JScript, 但是项目中的js代码有的地方需要node环境才能运行, 所以需要装一下Nodejs再运行就好了;
注意: nodejs安装完成后记得把IDE关闭重新打开,比如pycharm,不然IDE不会监测到jscript引擎的变化,导致依然报错
关于NodeJs安装可以参考这篇文章: https://www.cnblogs.com/liuqiyun/p/8133904.html
## :dolphin:安装依赖库
```
pip3 install -r requirements.txt
```
## :dolphin:存储数据库
> **Database: MongoDB**
## :dolphin:**相关截图**
> - **运行过程**

> - **数据截图**

> - **阿布云**


## :dolphin:**总结**
> **最后,如果你觉得这个项目不错或者对你有帮助,给个Star呗,也算是对我学习路上的一种鼓励!
哈哈哈,感谢大家!笔芯哟~**:cupid::cupid:
================================================
FILE: Wenshu_Project/Wenshu/__init__.py
================================================
================================================
FILE: Wenshu_Project/Wenshu/cmdline.py
================================================
# !/user/bin/env python
# -*- coding:utf-8 -*-
# time: 2018/10/18--17:11
__author__ = 'Henry'
from scrapy import cmdline
if __name__ == '__main__':
#execute的参数类型为一个列表
# 写法一
cmdline.execute('scrapy crawl wenshu'.split())
# 写法二
# cmdline.execute(['scrapy', 'crawl', 'wenshu'])
================================================
FILE: Wenshu_Project/Wenshu/items.py
================================================
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class WenshuCaseItem(scrapy.Item):
# define the fields for your item here like:
casecourt = scrapy.Field()
casecontent = scrapy.Field()
casetype = scrapy.Field()
# casereason = scrapy.Field()
casejudgedate = scrapy.Field()
# caseparty = scrapy.Field()
caseprocedure = scrapy.Field()
casenumber = scrapy.Field()
casenopublicreason = scrapy.Field()
casedocid = scrapy.Field()
casename = scrapy.Field()
casecontenttype = scrapy.Field()
caseuploaddate = scrapy.Field()
casedoctype = scrapy.Field()
caseclosemethod = scrapy.Field()
caseeffectivelevel = scrapy.Field()
================================================
FILE: Wenshu_Project/Wenshu/middlewares.py
================================================
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
import random, requests, logging, base64
class RandomUserAgentMiddleware(object):
def __init__(self, agents):
self.agents = agents
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings.getlist('USER_AGENTS'))
def process_request(self, request, spider):
# print("********Current UserAgent********" + random.choice(self.agents))
request.headers.setdefault('User-Agent', random.choice(self.agents))
# 法一:连接阿布云动态代理隧道(付费:IP质量好)
class ProxyMiddleware(object):
def __init__(self):
# 阿布云代理服务器
self.proxyServer = "http://http-dyn.abuyun.com:9020"
# 代理隧道验证信息
proxyUser = "***在此填入阿布云通行证书***"
proxyPass = "***在此填入阿布云通行密钥***"
self.proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8") # Python3
# self.proxyAuth = "Basic " + base64.b64encode(proxyUser + ":" + proxyPass) # Python2
def process_request(self, request, spider):
'''处理请求request'''
request.headers['Proxy-Authorization'] = self.proxyAuth
request.meta['proxy'] = self.proxyServer
def process_response(self, request, response, spider):
'''处理返回的response'''
# print(response.url)
html = response.body.decode()
if response.status != 200 or 'remind key' in html or 'remind' in html or '请开启JavaScript' in html or '服务不可用' in html:
# print('正在重新请求************')
new_request = request.copy()
new_request.dont_filter = True
return new_request
else:
return response
def process_exception(self, request, exception, spider):
new_request = request.copy()
new_request.dont_filter = True
return new_request
# 法二:连接本地自己维护的代理池(免费:但是IP质量不好,很容易被ban掉)
# class ProxyMiddleware(object):
# def __init__(self, PROXY_POOL_URL, DELETE_PROXY_URL):
#
# # self.PROXY_POOL_URL = PROXY_POOL_URL
# # self.DELETE_PROXY_URL = DELETE_PROXY_URL
#
# @classmethod
# def from_crawler(cls, crawler):
# return cls(
# crawler.settings.get('PROXY_POOL_URL'),
# crawler.settings.get('DELETE_PROXY_URL')
# )
#
# def process_request(self, request, spider):
# '''处理请求request'''
# # request.meta['proxy'] = 'http://' + self.get_randomproxy()
#
# def process_response(self, request, response, spider):
# '''处理返回的response'''
# # if response.status != 200 or response.body in ['"remind key"', 'remind'] or '请开启JavaScript' in response.body:
# print(response.url)
# # print(response.body)
#
# # if response.status != 200 or b'remind' in response.body or b"[]" in response.body or b"window.location.href" in response.body:
# # # if response.status != 200 or 'VisitRemind' in response.url: # 'VisitRemind' in response.url:出现一级验证码
# # print('请求太快,该IP已被封禁...尝试切换新的IP...')
# # if 'proxy' in request.meta :
# # # print(request.meta['proxy'])
# # self.delete_proxy(request.meta['proxy'].split('//')[1]) # 请求失败,删除此IP
# # proxy = self.get_randomproxy()
# # print("********Current Proxy********" + str(proxy))
# # request.meta['proxy'] = 'http://' + proxy # 切换新IP重新请求
# # return request
# return response
#
# def get_randomproxy(self):
# '''随机从IP池中获取代理'''
# try:
# response = requests.get(self.PROXY_POOL_URL)
# if response.status_code == 200:
# return response.text
# except:
# # return None
# return self.get_randomproxy()
#
# def delete_proxy(self, proxy):
# '''请求失败,从代理池中删除此IP'''
# try:
# response = requests.get(self.DELETE_PROXY_URL + proxy)
# if response.text == 1:
# logging.info('删除IP成功')
# print('删除IP成功')
# except:
# logging.info('删除IP失败')
# print('删除IP失败')
class WenshuSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(self, response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Should return None or raise an exception.
return None
def process_spider_output(self, response, result, spider):
# Called with the results returned from the Spider, after
# it has processed the response.
# Must return an iterable of Request, dict or Item objects.
for i in result:
yield i
def process_spider_exception(self, response, exception, spider):
# Called when a spider or process_spider_input() method
# (from other spider middleware) raises an exception.
# Should return either None or an iterable of Response, dict
# or Item objects.
pass
def process_start_requests(self, start_requests, spider):
# Called with the start requests of the spider, and works
# similarly to the process_spider_output() method, except
# that it doesn’t have a response associated.
# Must return only requests (not items).
for r in start_requests:
yield r
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
class WenshuDownloaderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the downloader middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_request(self, request, spider):
# Called for each request that goes through the downloader
# middleware.
# Must either:
# - return None: continue processing this request
# - or return a Response object
# - or return a Request object
# - or raise IgnoreRequest: process_exception() methods of
# installed downloader middleware will be called
return None
def process_response(self, request, response, spider):
# Called with the response returned from the downloader.
# Must either;
# - return a Response object
# - return a Request object
# - or raise IgnoreRequest
return response
def process_exception(self, request, exception, spider):
# Called when a download handler or a process_request()
# (from other downloader middleware) raises an exception.
# Must either:
# - return None: continue processing this exception
# - return a Response object: stops process_exception() chain
# - return a Request object: stops process_exception() chain
pass
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
================================================
FILE: Wenshu_Project/Wenshu/pipelines.py
================================================
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymongo,time
from pymongo.errors import DuplicateKeyError
from scrapy.conf import settings
# 1.简单同步存储item
class WenshuPipeline(object):
def __init__(self):
host = settings['MONGODB_HOST']
port = settings['MONGODB_PORT']
dbname = settings['MONGODB_DBNAME']
docname = settings['MONGODB_DOCNAME']
self.client = pymongo.MongoClient(host=host,port=port)
db = self.client[dbname]
db[docname].ensure_index('casedocid', unique=True) # 设置文书ID为唯一索引,避免插入重复数据
self.post = db[docname]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
'''插入数据'''
try:
data = dict(item)
self.post.insert_one(data)
return item
except DuplicateKeyError:
# 索引相同,即为重复数据,捕获错误
spider.logger.debug('Duplicate key error collection')
return item
# 2.异步存储item - 不行!插入不了数据! (参考:https://zhuanlan.zhihu.com/p/44003499)
# from twisted.internet import defer, reactor
# class WenshuPipeline(object):
# def __init__(self, mongo_host, mongo_port, mongo_db, mongo_doc):
# self.mongo_host = mongo_host
# self.mongo_port = mongo_port
# self.mongo_db = mongo_db
# self.mongo_doc = mongo_doc
#
# @classmethod
# def from_crawler(cls, crawler):
# return cls(
# mongo_host=crawler.settings.get('MONGODB_HOST'),
# mongo_port=crawler.settings.get('MONGODB_PORT'),
# mongo_db=crawler.settings.get('MONGODB_DBNAME'),
# mongo_doc=crawler.settings.get('MONGODB_DOCNAME'),
# )
#
# def open_spider(self, spider):
# self.client = pymongo.MongoClient(host=self.mongo_host,port=self.mongo_port)
# self.mongodb = self.client[self.mongo_db]
# self.mongodb[self.mongo_doc].create_index('id', unique=True) # 创建索引,避免插入数据
#
# def close_spider(self, spider):
# self.client.close()
#
# # 下面的操作是重点
# @defer.inlineCallbacks
# def process_item(self, item, spider):
# out = defer.Deferred()
# reactor.callInThread(self._insert, item, out, spider)
# yield out
# defer.returnValue(item)
# return item
#
# def _insert(self, item, out, spider):
# time.sleep(10)
# try:
# self.mongodb[self.mongo_doc].insert_one(dict(item))
# reactor.callFromThread(out.callback, item)
# except DuplicateKeyError:
# # 索引相同,即为重复数据,捕获错误
# spider.logger.debug('duplicate key error collection')
# reactor.callFromThread(out.callback, item)
================================================
FILE: Wenshu_Project/Wenshu/settings.py
================================================
# -*- coding: utf-8 -*-
# Scrapy settings for Wenshu project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/latest/topics/settings.html
# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
import time
BOT_NAME = 'Wenshu'
SPIDER_MODULES = ['Wenshu.spiders']
NEWSPIDER_MODULE = 'Wenshu.spiders'
#连接MongoDB数据库
MONGODB_HOST = '127.0.0.1'
MONGODB_PORT = 27017
MONGODB_DBNAME = 'Henry' #数据库名
MONGODB_DOCNAME = 'wenshu' #表名
# 设置本地的IP代理池地址
# PROXY_POOL_URL = 'http://localhost:5555/random'
# DELETE_PROXY_URL = 'http://localhost:5555/del/'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'Wenshu (+http://www.yourdomain.com)'
# 请求失败重试
RETRY_ENABLED = True #是否开启retry
RETRY_TIMES = 3 #重试次数
# RETRY_HTTP_CODECS #遇到什么http code时需要重试,默认是500,502,503,504,408,其他的,网络连接超时等问题也会自动retry的
# 中断后继续执行
JOB_DIR = 'wenshujob'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# 设置参数教程:https://blog.csdn.net/q_an1314/article/details/51245011
# Configure maximum concurrent requests performed by Scrapy (default: 16)
# CONCURRENT_REQUESTS = 300 # 由Scrapy下载程序执行的并发(即同时)请求的最大数量(选择一个能使CPU占用率在80%-90%的并发数)
CONCURRENT_REQUESTS_PER_SPIDER = 5 # 线程数(因为阿布云设置的是每秒最多5个请求,有钱可以加到100的并发)
CONCURRENT_REQUESTS_PER_DOMAIN = 1000000 # 任何单个域执行的并发(即同时)请求的最大数量
# CONCURRENT_REQUESTS_PER_IP = 0 # 任何单个IP执行的并发(即同时)请求的最大数量 ; 默认值(0),这样就禁用了对每个IP的限制
# 启用DNS内存缓存
DNSCACHE_ENABLED = True
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# 下载延迟
DOWNLOAD_DELAY = 0 # scrapy的并发请求,只有在delay=0时才能实现;心疼服务器的可以加点延迟~
# 下载超时
DOWNLOAD_TIMEOUT = 8 # 减小下载超时能让卡住的连接能被快速的放弃并解放处理其他站点的能力,默认15秒
# 但是减小下载超时可能会引发错误:
# TimeoutError: User timeout caused connection failure: Getting http://xxx.com. took longer than 15.0 seconds.
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# 禁止重定向
REDIRECT_ENABLED = False
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'Host':'wenshu.court.gov.cn',
'Origin':'http://wenshu.court.gov.cn',
}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
# 'Wenshu.middlewares.WenshuSpiderMiddleware': 543,
# }
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
# 'Wenshu.middlewares.WenshuDownloaderMiddleware': 543,
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 200,
'Wenshu.middlewares.ProxyMiddleware': 300,
'Wenshu.middlewares.RandomUserAgentMiddleware': 1,
}
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'Wenshu.pipelines.WenshuPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
USER_AGENTS = [
"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
"Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)",
"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)",
"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre",
"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )",
"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)",
"Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a",
"Mozilla/2.02E (Win95; U)",
"Mozilla/3.01Gold (Win95; I)",
"Mozilla/4.8 [en] (Windows NT 5.1; U)",
"Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)",
"HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522 (KHTML, like Gecko) Safari/419.3",
"Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10 (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2",
"Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
"Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
]
# 设置日志
# 日志文件
# LOG_FILE = 'wenshu.log' # 最好为爬虫名称
LOG_FILE = BOT_NAME + '_' + time.strftime("%Y%m%d", time.localtime()) + '.log'
# 日志等级
LOG_LEVEL = 'INFO'
# 是否启用日志(创建日志后,不需开启,进行配置)
LOG_ENABLED = True # (默认为True,启用日志)
# 日志编码
LOG_ENCODING = 'utf-8'
# 如果是True ,进程当中,所有标准输出(包括错误)将会被重定向到log中;例如:在爬虫代码中的 print()
LOG_STDOUT = False # 默认为False
================================================
FILE: Wenshu_Project/Wenshu/spiders/__init__.py
================================================
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
================================================
FILE: Wenshu_Project/Wenshu/spiders/get_docid.js
================================================
window = {};
//AES
var CryptoJS = CryptoJS || function (u, p) {
var d = {}
, l = d.lib = {}
, s = function () {
}
, t = l.Base = {
extend: function (a) {
s.prototype = this;
var c = new s;
a && c.mixIn(a);
c.hasOwnProperty("init") || (c.init = function () {
c.$super.init.apply(this, arguments)
}
);
c.init.prototype = c;
c.$super = this;
return c
},
create: function () {
var a = this.extend();
a.init.apply(a, arguments);
return a
},
init: function () {
},
mixIn: function (a) {
for (var c in a)
a.hasOwnProperty(c) && (this[c] = a[c]);
a.hasOwnProperty("toString") && (this.toString = a.toString)
},
clone: function () {
return this.init.prototype.extend(this)
}
}
, r = l.WordArray = t.extend({
init: function (a, c) {
a = this.words = a || [];
this.sigBytes = c != p ? c : 4 * a.length
},
toString: function (a) {
return (a || v).stringify(this)
},
concat: function (a) {
var c = this.words
, e = a.words
, j = this.sigBytes;
a = a.sigBytes;
this.clamp();
if (j % 4)
for (var k = 0; k < a; k++)
c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
else if (65535 < e.length)
for (k = 0; k < a; k += 4)
c[j + k >>> 2] = e[k >>> 2];
else
c.push.apply(c, e);
this.sigBytes += a;
return this
},
clamp: function () {
var a = this.words
, c = this.sigBytes;
a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);
a.length = u.ceil(c / 4)
},
clone: function () {
var a = t.clone.call(this);
a.words = this.words.slice(0);
return a
},
random: function (a) {
for (var c = [], e = 0; e < a; e += 4)
c.push(4294967296 * u.random() | 0);
return new r.init(c, a)
}
})
, w = d.enc = {}
, v = w.Hex = {
stringify: function (a) {
var c = a.words;
a = a.sigBytes;
for (var e = [], j = 0; j < a; j++) {
var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
e.push((k >>> 4).toString(16));
e.push((k & 15).toString(16))
}
return e.join("")
},
parse: function (a) {
for (var c = a.length, e = [], j = 0; j < c; j += 2)
e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << 24 - 4 * (j % 8);
return new r.init(e, c / 2)
}
}
, b = w.Latin1 = {
stringify: function (a) {
var c = a.words;
a = a.sigBytes;
for (var e = [], j = 0; j < a; j++)
e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
return e.join("")
},
parse: function (a) {
for (var c = a.length, e = [], j = 0; j < c; j++)
e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
return new r.init(e, c)
}
}
, x = w.Utf8 = {
stringify: function (a) {
try {
return decodeURIComponent(escape(b.stringify(a)))
} catch (c) {
throw Error("Malformed UTF-8 data");
}
},
parse: function (a) {
return b.parse(unescape(encodeURIComponent(a)))
}
}
, q = l.BufferedBlockAlgorithm = t.extend({
reset: function () {
this._data = new r.init;
this._nDataBytes = 0
},
_append: function (a) {
"string" == typeof a && (a = x.parse(a));
this._data.concat(a);
this._nDataBytes += a.sigBytes
},
_process: function (a) {
var c = this._data
, e = c.words
, j = c.sigBytes
, k = this.blockSize
, b = j / (4 * k)
, b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0);
a = b * k;
j = u.min(4 * a, j);
if (a) {
for (var q = 0; q < a; q += k)
this._doProcessBlock(e, q);
q = e.splice(0, a);
c.sigBytes -= j
}
return new r.init(q, j)
},
clone: function () {
var a = t.clone.call(this);
a._data = this._data.clone();
return a
},
_minBufferSize: 0
});
l.Hasher = q.extend({
cfg: t.extend(),
init: function (a) {
this.cfg = this.cfg.extend(a);
this.reset()
},
reset: function () {
q.reset.call(this);
this._doReset()
},
update: function (a) {
this._append(a);
this._process();
return this
},
finalize: function (a) {
a && this._append(a);
return this._doFinalize()
},
blockSize: 16,
_createHelper: function (a) {
return function (b, e) {
return (new a.init(e)).finalize(b)
}
},
_createHmacHelper: function (a) {
return function (b, e) {
return (new n.HMAC.init(a, e)).finalize(b)
}
}
});
var n = d.algo = {};
return d
}(Math);
(function () {
var u = CryptoJS
, p = u.lib.WordArray;
u.enc.Base64 = {
stringify: function (d) {
var l = d.words
, p = d.sigBytes
, t = this._map;
d.clamp();
d = [];
for (var r = 0; r < p; r += 3)
for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)
d.push(t.charAt(w >>> 6 * (3 - v) & 63));
if (l = t.charAt(64))
for (; d.length % 4;)
d.push(l);
return d.join("")
},
parse: function (d) {
var l = d.length
, s = this._map
, t = s.charAt(64);
t && (t = d.indexOf(t),
-1 != t && (l = t));
for (var t = [], r = 0, w = 0; w < l; w++)
if (w % 4) {
var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4)
, b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
r++
}
return p.create(t, r)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
}
)();
(function (u) {
function p(b, n, a, c, e, j, k) {
b = b + (n & a | ~n & c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function d(b, n, a, c, e, j, k) {
b = b + (n & c | a & ~c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function l(b, n, a, c, e, j, k) {
b = b + (n ^ a ^ c) + e + k;
return (b << j | b >>> 32 - j) + n
}
function s(b, n, a, c, e, j, k) {
b = b + (a ^ (n | ~c)) + e + k;
return (b << j | b >>> 32 - j) + n
}
for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)
b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
r = r.MD5 = v.extend({
_doReset: function () {
this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function (q, n) {
for (var a = 0; 16 > a; a++) {
var c = n + a
, e = q[c];
q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
}
var a = this._hash.words
, c = q[n + 0]
, e = q[n + 1]
, j = q[n + 2]
, k = q[n + 3]
, z = q[n + 4]
, r = q[n + 5]
, t = q[n + 6]
, w = q[n + 7]
, v = q[n + 8]
, A = q[n + 9]
, B = q[n + 10]
, C = q[n + 11]
, u = q[n + 12]
, D = q[n + 13]
, E = q[n + 14]
, x = q[n + 15]
, f = a[0]
, m = a[1]
, g = a[2]
, h = a[3]
, f = p(f, m, g, h, c, 7, b[0])
, h = p(h, f, m, g, e, 12, b[1])
, g = p(g, h, f, m, j, 17, b[2])
, m = p(m, g, h, f, k, 22, b[3])
, f = p(f, m, g, h, z, 7, b[4])
, h = p(h, f, m, g, r, 12, b[5])
, g = p(g, h, f, m, t, 17, b[6])
, m = p(m, g, h, f, w, 22, b[7])
, f = p(f, m, g, h, v, 7, b[8])
, h = p(h, f, m, g, A, 12, b[9])
, g = p(g, h, f, m, B, 17, b[10])
, m = p(m, g, h, f, C, 22, b[11])
, f = p(f, m, g, h, u, 7, b[12])
, h = p(h, f, m, g, D, 12, b[13])
, g = p(g, h, f, m, E, 17, b[14])
, m = p(m, g, h, f, x, 22, b[15])
, f = d(f, m, g, h, e, 5, b[16])
, h = d(h, f, m, g, t, 9, b[17])
, g = d(g, h, f, m, C, 14, b[18])
, m = d(m, g, h, f, c, 20, b[19])
, f = d(f, m, g, h, r, 5, b[20])
, h = d(h, f, m, g, B, 9, b[21])
, g = d(g, h, f, m, x, 14, b[22])
, m = d(m, g, h, f, z, 20, b[23])
, f = d(f, m, g, h, A, 5, b[24])
, h = d(h, f, m, g, E, 9, b[25])
, g = d(g, h, f, m, k, 14, b[26])
, m = d(m, g, h, f, v, 20, b[27])
, f = d(f, m, g, h, D, 5, b[28])
, h = d(h, f, m, g, j, 9, b[29])
, g = d(g, h, f, m, w, 14, b[30])
, m = d(m, g, h, f, u, 20, b[31])
, f = l(f, m, g, h, r, 4, b[32])
, h = l(h, f, m, g, v, 11, b[33])
, g = l(g, h, f, m, C, 16, b[34])
, m = l(m, g, h, f, E, 23, b[35])
, f = l(f, m, g, h, e, 4, b[36])
, h = l(h, f, m, g, z, 11, b[37])
, g = l(g, h, f, m, w, 16, b[38])
, m = l(m, g, h, f, B, 23, b[39])
, f = l(f, m, g, h, D, 4, b[40])
, h = l(h, f, m, g, c, 11, b[41])
, g = l(g, h, f, m, k, 16, b[42])
, m = l(m, g, h, f, t, 23, b[43])
, f = l(f, m, g, h, A, 4, b[44])
, h = l(h, f, m, g, u, 11, b[45])
, g = l(g, h, f, m, x, 16, b[46])
, m = l(m, g, h, f, j, 23, b[47])
, f = s(f, m, g, h, c, 6, b[48])
, h = s(h, f, m, g, w, 10, b[49])
, g = s(g, h, f, m, E, 15, b[50])
, m = s(m, g, h, f, r, 21, b[51])
, f = s(f, m, g, h, u, 6, b[52])
, h = s(h, f, m, g, k, 10, b[53])
, g = s(g, h, f, m, B, 15, b[54])
, m = s(m, g, h, f, e, 21, b[55])
, f = s(f, m, g, h, v, 6, b[56])
, h = s(h, f, m, g, x, 10, b[57])
, g = s(g, h, f, m, t, 15, b[58])
, m = s(m, g, h, f, D, 21, b[59])
, f = s(f, m, g, h, z, 6, b[60])
, h = s(h, f, m, g, C, 10, b[61])
, g = s(g, h, f, m, j, 15, b[62])
, m = s(m, g, h, f, A, 21, b[63]);
a[0] = a[0] + f | 0;
a[1] = a[1] + m | 0;
a[2] = a[2] + g | 0;
a[3] = a[3] + h | 0
},
_doFinalize: function () {
var b = this._data
, n = b.words
, a = 8 * this._nDataBytes
, c = 8 * b.sigBytes;
n[c >>> 5] |= 128 << 24 - c % 32;
var e = u.floor(a / 4294967296);
n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
b.sigBytes = 4 * (n.length + 1);
this._process();
b = this._hash;
n = b.words;
for (a = 0; 4 > a; a++)
c = n[a],
n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
return b
},
clone: function () {
var b = v.clone.call(this);
b._hash = this._hash.clone();
return b
}
});
t.MD5 = v._createHelper(r);
t.HmacMD5 = v._createHmacHelper(r)
}
)(Math);
(function () {
var u = CryptoJS
, p = u.lib
, d = p.Base
, l = p.WordArray
, p = u.algo
, s = p.EvpKDF = d.extend({
cfg: d.extend({
keySize: 4,
hasher: p.MD5,
iterations: 1
}),
init: function (d) {
this.cfg = this.cfg.extend(d)
},
compute: function (d, r) {
for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) {
n && s.update(n);
var n = s.update(d).finalize(r);
s.reset();
for (var a = 1; a < p; a++)
n = s.finalize(n),
s.reset();
b.concat(n)
}
b.sigBytes = 4 * q;
return b
}
});
u.EvpKDF = function (d, l, p) {
return s.create(p).compute(d, l)
}
}
)();
CryptoJS.lib.Cipher || function (u) {
var p = CryptoJS
, d = p.lib
, l = d.Base
, s = d.WordArray
, t = d.BufferedBlockAlgorithm
, r = p.enc.Base64
, w = p.algo.EvpKDF
, v = d.Cipher = t.extend({
cfg: l.extend(),
createEncryptor: function (e, a) {
return this.create(this._ENC_XFORM_MODE, e, a)
},
createDecryptor: function (e, a) {
return this.create(this._DEC_XFORM_MODE, e, a)
},
init: function (e, a, b) {
this.cfg = this.cfg.extend(b);
this._xformMode = e;
this._key = a;
this.reset()
},
reset: function () {
t.reset.call(this);
this._doReset()
},
process: function (e) {
this._append(e);
return this._process()
},
finalize: function (e) {
e && this._append(e);
return this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function (e) {
return {
encrypt: function (b, k, d) {
return ("string" == typeof k ? c : a).encrypt(e, b, k, d)
},
decrypt: function (b, k, d) {
return ("string" == typeof k ? c : a).decrypt(e, b, k, d)
}
}
}
});
d.StreamCipher = v.extend({
_doFinalize: function () {
return this._process(!0)
},
blockSize: 1
});
var b = p.mode = {}
, x = function (e, a, b) {
var c = this._iv;
c ? this._iv = u : c = this._prevBlock;
for (var d = 0; d < b; d++)
e[a + d] ^= c[d]
}
, q = (d.BlockCipherMode = l.extend({
createEncryptor: function (e, a) {
return this.Encryptor.create(e, a)
},
createDecryptor: function (e, a) {
return this.Decryptor.create(e, a)
},
init: function (e, a) {
this._cipher = e;
this._iv = a
}
})).extend();
q.Encryptor = q.extend({
processBlock: function (e, a) {
var b = this._cipher
, c = b.blockSize;
x.call(this, e, a, c);
b.encryptBlock(e, a);
this._prevBlock = e.slice(a, a + c)
}
});
q.Decryptor = q.extend({
processBlock: function (e, a) {
var b = this._cipher
, c = b.blockSize
, d = e.slice(a, a + c);
b.decryptBlock(e, a);
x.call(this, e, a, c);
this._prevBlock = d
}
});
b = b.CBC = q;
q = (p.pad = {}).Pkcs7 = {
pad: function (a, b) {
for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)
l.push(d);
c = s.create(l, c);
a.concat(c)
},
unpad: function (a) {
a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
}
};
d.BlockCipher = v.extend({
cfg: v.cfg.extend({
mode: b,
padding: q
}),
reset: function () {
v.reset.call(this);
var a = this.cfg
, b = a.iv
, a = a.mode;
if (this._xformMode == this._ENC_XFORM_MODE)
var c = a.createEncryptor;
else
c = a.createDecryptor,
this._minBufferSize = 1;
this._mode = c.call(a, this, b && b.words)
},
_doProcessBlock: function (a, b) {
this._mode.processBlock(a, b)
},
_doFinalize: function () {
var a = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
a.pad(this._data, this.blockSize);
var b = this._process(!0)
} else
b = this._process(!0),
a.unpad(b);
return b
},
blockSize: 4
});
var n = d.CipherParams = l.extend({
init: function (a) {
this.mixIn(a)
},
toString: function (a) {
return (a || this.formatter).stringify(this)
}
})
, b = (p.format = {}).OpenSSL = {
stringify: function (a) {
var b = a.ciphertext;
a = a.salt;
return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)
},
parse: function (a) {
a = r.parse(a);
var b = a.words;
if (1398893684 == b[0] && 1701076831 == b[1]) {
var c = s.create(b.slice(2, 4));
b.splice(0, 4);
a.sigBytes -= 16
}
return n.create({
ciphertext: a,
salt: c
})
}
}
, a = d.SerializableCipher = l.extend({
cfg: l.extend({
format: b
}),
encrypt: function (a, b, c, d) {
d = this.cfg.extend(d);
var l = a.createEncryptor(c, d);
b = l.finalize(b);
l = l.cfg;
return n.create({
ciphertext: b,
key: c,
iv: l.iv,
algorithm: a,
mode: l.mode,
padding: l.padding,
blockSize: a.blockSize,
formatter: d.format
})
},
decrypt: function (a, b, c, d) {
d = this.cfg.extend(d);
b = this._parse(b, d.format);
return a.createDecryptor(c, d).finalize(b.ciphertext)
},
_parse: function (a, b) {
return "string" == typeof a ? b.parse(a, this) : a
}
})
, p = (p.kdf = {}).OpenSSL = {
execute: function (a, b, c, d) {
d || (d = s.random(8));
a = w.create({
keySize: b + c
}).compute(a, d);
c = s.create(a.words.slice(b), 4 * c);
a.sigBytes = 4 * b;
return n.create({
key: a,
iv: c,
salt: d
})
}
}
, c = d.PasswordBasedCipher = a.extend({
cfg: a.cfg.extend({
kdf: p
}),
encrypt: function (b, c, d, l) {
l = this.cfg.extend(l);
d = l.kdf.execute(d, b.keySize, b.ivSize);
l.iv = d.iv;
b = a.encrypt.call(this, b, c, d.key, l);
b.mixIn(d);
return b
},
decrypt: function (b, c, d, l) {
l = this.cfg.extend(l);
c = this._parse(c, l.format);
d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
l.iv = d.iv;
return a.decrypt.call(this, b, c, d.key, l)
}
})
}();
(function () {
for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)
a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
for (var e = 0, j = 0, c = 0; 256 > c; c++) {
var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4
, k = k >>> 8 ^ k & 255 ^ 99;
l[e] = k;
s[k] = e;
var z = a[e]
, F = a[z]
, G = a[F]
, y = 257 * a[k] ^ 16843008 * k;
t[e] = y << 24 | y >>> 8;
r[e] = y << 16 | y >>> 16;
w[e] = y << 8 | y >>> 24;
v[e] = y;
y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
b[k] = y << 24 | y >>> 8;
x[k] = y << 16 | y >>> 16;
q[k] = y << 8 | y >>> 24;
n[k] = y;
e ? (e = z ^ a[a[a[G ^ z]]],
j ^= a[a[j]]) : e = j = 1
}
var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
, d = d.AES = p.extend({
_doReset: function () {
for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)
if (j < d)
e[j] = c[j];
else {
var k = e[j - 1];
j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24,
k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255],
k ^= H[j / d | 0] << 24);
e[j] = e[j - d] ^ k
}
c = this._invKeySchedule = [];
for (d = 0; d < a; d++)
j = a - d,
k = d % 4 ? e[j] : e[j - 4],
c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> 8 & 255]] ^ n[l[k & 255]]
},
encryptBlock: function (a, b) {
this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l)
},
decryptBlock: function (a, c) {
var d = a[c + 1];
a[c + 1] = a[c + 3];
a[c + 3] = d;
this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s);
d = a[c + 1];
a[c + 1] = a[c + 3];
a[c + 3] = d
},
_doCryptBlock: function (a, b, c, d, e, j, l, f) {
for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)
var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++]
, s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++]
, t = d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++]
, n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++]
, g = q
, h = s
, k = t;
q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
a[b] = q;
a[b + 1] = s;
a[b + 2] = t;
a[b + 3] = n
},
keySize: 8
});
u.AES = p._createHelper(d)
}
)();
//RawDeflate.inflate
(function (ctx) {
var zip_WSIZE = 32768; // Sliding Window size
var zip_STORED_BLOCK = 0;
var zip_STATIC_TREES = 1;
var zip_DYN_TREES = 2;
var zip_lbits = 9; // bits in base literal/length lookup table
var zip_dbits = 6; // bits in base distance lookup table
var zip_INBUFSIZ = 32768; // Input buffer size
var zip_INBUF_EXTRA = 64; // Extra buffer
var zip_slide;
var zip_wp; // current position in slide
var zip_fixed_tl = null; // inflate static
var zip_fixed_td; // inflate static
var zip_fixed_bl, zip_fixed_bd; // inflate static
var zip_bit_buf; // bit buffer
var zip_bit_len; // bits in bit buffer
var zip_method;
var zip_eof;
var zip_copy_leng;
var zip_copy_dist;
var zip_tl, zip_td; // literal/length and distance decoder tables
var zip_bl, zip_bd; // number of bits decoded by tl and td
var zip_inflate_data;
var zip_inflate_pos;
var zip_MASK_BITS = new Array(
0x0000,
0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff);
// Tables for deflate from PKZIP's appnote.txt.
var zip_cplens = new Array( // Copy lengths for literal codes 257..285
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);
var zip_cplext = new Array( // Extra bits for literal codes 257..285
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99); // 99==invalid
var zip_cpdist = new Array( // Copy offsets for distance codes 0..29
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
8193, 12289, 16385, 24577);
var zip_cpdext = new Array( // Extra bits for distance codes
0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
12, 12, 13, 13);
var zip_border = new Array( // Order of the bit length code lengths
16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);
var zip_HuftList = function () {
this.next = null;
this.list = null;
}
var zip_HuftNode = function () {
this.e = 0; // number of extra bits or operation
this.b = 0; // number of bits in this code or subcode
// union
this.n = 0; // literal, length base, or distance base
this.t = null; // (zip_HuftNode) pointer to next level of table
}
var zip_HuftBuild = function (b, // code lengths in bits (all assumed <= BMAX)
n, // number of codes (assumed <= N_MAX)
s, // number of simple-valued codes (0..s-1)
d, // list of base values for non-simple codes
e, // list of extra bits for non-simple codes
mm // maximum lookup bits
) {
this.BMAX = 16; // maximum bit length of any code
this.N_MAX = 288; // maximum number of codes in any set
this.status = 0; // 0: success, 1: incomplete table, 2: bad input
this.root = null; // (zip_HuftList) starting table
this.m = 0; // maximum lookup bits, returns actual
{
var a; // counter for codes of length k
var c = new Array(this.BMAX + 1); // bit length count table
var el; // length of EOB code (value 256)
var f; // i repeats in table every f entries
var g; // maximum code length
var h; // table level
var i; // counter, current code
var j; // counter
var k; // number of bits in current code
var lx = new Array(this.BMAX + 1); // stack of bits per table
var p; // pointer into c[], b[], or v[]
var pidx; // index of p
var q; // (zip_HuftNode) points to current table
var r = new zip_HuftNode(); // table entry for structure assignment
var u = new Array(this.BMAX); // zip_HuftNode[BMAX][] table stack
var v = new Array(this.N_MAX); // values in order of bit length
var w;
var x = new Array(this.BMAX + 1);// bit offsets, then code stack
var xp; // pointer into x or c
var y; // number of dummy codes added
var z; // number of entries in current table
var o;
var tail; // (zip_HuftList)
tail = this.root = null;
for (i = 0; i < c.length; i++)
c[i] = 0;
for (i = 0; i < lx.length; i++)
lx[i] = 0;
for (i = 0; i < u.length; i++)
u[i] = null;
for (i = 0; i < v.length; i++)
v[i] = 0;
for (i = 0; i < x.length; i++)
x[i] = 0;
// Generate counts for each bit length
el = n > 256 ? b[256] : this.BMAX; // set length of EOB code, if any
p = b;
pidx = 0;
i = n;
do {
c[p[pidx]]++; // assume all entries <= BMAX
pidx++;
} while (--i > 0);
if (c[0] == n) { // null input--all zero length codes
this.root = null;
this.m = 0;
this.status = 0;
return;
}
// Find minimum and maximum length, bound *m by those
for (j = 1; j <= this.BMAX; j++)
if (c[j] != 0)
break;
k = j; // minimum code length
if (mm < j)
mm = j;
for (i = this.BMAX; i != 0; i--)
if (c[i] != 0)
break;
g = i; // maximum code length
if (mm > i)
mm = i;
// Adjust last length count to fill out codes, if needed
for (y = 1 << j; j < i; j++, y <<= 1)
if ((y -= c[j]) < 0) {
this.status = 2; // bad input: more codes than bits
this.m = mm;
return;
}
if ((y -= c[i]) < 0) {
this.status = 2;
this.m = mm;
return;
}
c[i] += y;
// Generate starting offsets into the value table for each length
x[1] = j = 0;
p = c;
pidx = 1;
xp = 2;
while (--i > 0) // note that i == g from above
x[xp++] = (j += p[pidx++]);
// Make a table of values in order of bit lengths
p = b;
pidx = 0;
i = 0;
do {
if ((j = p[pidx++]) != 0)
v[x[j]++] = i;
} while (++i < n);
n = x[g]; // set n to length of v
// Generate the Huffman codes and for each, make the table entries
x[0] = i = 0; // first Huffman code is zero
p = v;
pidx = 0; // grab values in bit order
h = -1; // no tables yet--level -1
w = lx[0] = 0; // no bits decoded yet
q = null; // ditto
z = 0; // ditto
// go through the bit lengths (k already is bits in shortest code)
for (; k <= g; k++) {
a = c[k];
while (a-- > 0) {
// here i is the Huffman code of length k bits for value p[pidx]
// make tables up to required level
while (k > w + lx[1 + h]) {
w += lx[1 + h]; // add bits already decoded
h++;
// compute minimum size table less than or equal to *m bits
z = (z = g - w) > mm ? mm : z; // upper limit
if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table
// too few codes for k-w bit table
f -= a + 1; // deduct codes from patterns left
xp = k;
while (++j < z) { // try smaller tables up to z bits
if ((f <<= 1) <= c[++xp])
break; // enough codes to use up j bits
f -= c[xp]; // else deduct codes from patterns
}
}
if (w + j > el && w < el)
j = el - w; // make EOB code end at table
z = 1 << j; // table entries for j-bit table
lx[1 + h] = j; // set table size in stack
// allocate and link in new table
q = new Array(z);
for (o = 0; o < z; o++) {
q[o] = new zip_HuftNode();
}
if (tail == null)
tail = this.root = new zip_HuftList();
else
tail = tail.next = new zip_HuftList();
tail.next = null;
tail.list = q;
u[h] = q; // table starts after link
/* connect to last table, if there is one */
if (h > 0) {
x[h] = i; // save pattern for backing up
r.b = lx[h]; // bits to dump before this table
r.e = 16 + j; // bits in this table
r.t = q; // pointer to this table
j = (i & ((1 << w) - 1)) >> (w - lx[h]);
u[h - 1][j].e = r.e;
u[h - 1][j].b = r.b;
u[h - 1][j].n = r.n;
u[h - 1][j].t = r.t;
}
}
// set up table entry in r
r.b = k - w;
if (pidx >= n)
r.e = 99; // out of values--invalid code
else if (p[pidx] < s) {
r.e = (p[pidx] < 256 ? 16 : 15); // 256 is end-of-block code
r.n = p[pidx++]; // simple code is just the value
} else {
r.e = e[p[pidx] - s]; // non-simple--look up in lists
r.n = d[p[pidx++] - s];
}
// fill code-like entries with r //
f = 1 << (k - w);
for (j = i >> w; j < z; j += f) {
q[j].e = r.e;
q[j].b = r.b;
q[j].n = r.n;
q[j].t = r.t;
}
// backwards increment the k-bit code i
for (j = 1 << (k - 1); (i & j) != 0; j >>= 1)
i ^= j;
i ^= j;
// backup over finished tables
while ((i & ((1 << w) - 1)) != x[h]) {
w -= lx[h]; // don't need to update q
h--;
}
}
}
/* return actual size of base table */
this.m = lx[1];
/* Return true (1) if we were given an incomplete table */
this.status = ((y != 0 && g != 1) ? 1 : 0);
}
/* end of constructor */
}
/* routines (inflate) */
var zip_GET_BYTE = function () {
if (zip_inflate_data.length == zip_inflate_pos)
return -1;
var charcode = zip_inflate_data.charCodeAt(zip_inflate_pos++);
return charcode & 0xff;
}
var zip_NEEDBITS = function (n) {
while (zip_bit_len < n) {
zip_bit_buf |= zip_GET_BYTE() << zip_bit_len;
zip_bit_len += 8;
}
}
var zip_GETBITS = function (n) {
return zip_bit_buf & zip_MASK_BITS[n];
}
var zip_DUMPBITS = function (n) {
zip_bit_buf >>= n;
zip_bit_len -= n;
}
var zip_inflate_codes = function (buff, off, size) {
/* inflate (decompress) the codes in a deflated (compressed) block.
Return an error code or zero if it all goes ok. */
var e; // table entry flag/number of extra bits
var t; // (zip_HuftNode) pointer to table entry
var n;
if (size == 0)
return 0;
// inflate the coded data
n = 0;
for (; ;) { // do until end of block
zip_NEEDBITS(zip_bl);
t = zip_tl.list[zip_GETBITS(zip_bl)];
e = t.e;
while (e > 16) {
if (e == 99)
return -1;
zip_DUMPBITS(t.b);
e -= 16;
zip_NEEDBITS(e);
t = t.t[zip_GETBITS(e)];
e = t.e;
}
zip_DUMPBITS(t.b);
if (e == 16) { // then it's a literal
zip_wp &= zip_WSIZE - 1;
buff[off + n++] = zip_slide[zip_wp++] = t.n;
if (n == size)
return size;
continue;
}
// exit if end of block
if (e == 15)
break;
// it's an EOB or a length
// get length of block to copy
zip_NEEDBITS(e);
zip_copy_leng = t.n + zip_GETBITS(e);
zip_DUMPBITS(e);
// decode distance of block to copy
zip_NEEDBITS(zip_bd);
t = zip_td.list[zip_GETBITS(zip_bd)];
e = t.e;
while (e > 16) {
if (e == 99)
return -1;
zip_DUMPBITS(t.b);
e -= 16;
zip_NEEDBITS(e);
t = t.t[zip_GETBITS(e)];
e = t.e;
}
zip_DUMPBITS(t.b);
zip_NEEDBITS(e);
zip_copy_dist = zip_wp - t.n - zip_GETBITS(e);
zip_DUMPBITS(e);
// do the copy
while (zip_copy_leng > 0 && n < size) {
zip_copy_leng--;
zip_copy_dist &= zip_WSIZE - 1;
zip_wp &= zip_WSIZE - 1;
buff[off + n++] = zip_slide[zip_wp++]
= zip_slide[zip_copy_dist++];
}
if (n == size)
return size;
}
zip_method = -1; // done
return n;
}
var zip_inflate_stored = function (buff, off, size) {
/* "decompress" an inflated type 0 (stored) block. */
var n;
// go to byte boundary
n = zip_bit_len & 7;
zip_DUMPBITS(n);
// get the length and its complement
zip_NEEDBITS(16);
n = zip_GETBITS(16);
zip_DUMPBITS(16);
zip_NEEDBITS(16);
if (n != ((~zip_bit_buf) & 0xffff))
return -1; // error in compressed data
zip_DUMPBITS(16);
// read and output the compressed data
zip_copy_leng = n;
n = 0;
while (zip_copy_leng > 0 && n < size) {
zip_copy_leng--;
zip_wp &= zip_WSIZE - 1;
zip_NEEDBITS(8);
buff[off + n++] = zip_slide[zip_wp++] =
zip_GETBITS(8);
zip_DUMPBITS(8);
}
if (zip_copy_leng == 0)
zip_method = -1; // done
return n;
}
var zip_inflate_fixed = function (buff, off, size) {
/* decompress an inflated type 1 (fixed Huffman codes) block. We should
either replace this with a custom decoder, or at least precompute the
Huffman tables. */
// if first time, set up tables for fixed blocks
if (zip_fixed_tl == null) {
var i; // temporary variable
var l = new Array(288); // length list for huft_build
var h; // zip_HuftBuild
// literal table
for (i = 0; i < 144; i++)
l[i] = 8;
for (; i < 256; i++)
l[i] = 9;
for (; i < 280; i++)
l[i] = 7;
for (; i < 288; i++) // make a complete, but wrong code set
l[i] = 8;
zip_fixed_bl = 7;
h = new zip_HuftBuild(l, 288, 257, zip_cplens, zip_cplext,
zip_fixed_bl);
if (h.status != 0) {
alert("HufBuild error: " + h.status);
return -1;
}
zip_fixed_tl = h.root;
zip_fixed_bl = h.m;
// distance table
for (i = 0; i < 30; i++) // make an incomplete code set
l[i] = 5;
zip_fixed_bd = 5;
h = new zip_HuftBuild(l, 30, 0, zip_cpdist, zip_cpdext, zip_fixed_bd);
if (h.status > 1) {
zip_fixed_tl = null;
alert("HufBuild error: " + h.status);
return -1;
}
zip_fixed_td = h.root;
zip_fixed_bd = h.m;
}
zip_tl = zip_fixed_tl;
zip_td = zip_fixed_td;
zip_bl = zip_fixed_bl;
zip_bd = zip_fixed_bd;
return zip_inflate_codes(buff, off, size);
}
var zip_inflate_dynamic = function (buff, off, size) {
// decompress an inflated type 2 (dynamic Huffman codes) block.
var i; // temporary variables
var j;
var l; // last length
var n; // number of lengths to get
var t; // (zip_HuftNode) literal/length code table
var nb; // number of bit length codes
var nl; // number of literal/length codes
var nd; // number of distance codes
var ll = new Array(286 + 30); // literal/length and distance code lengths
var h; // (zip_HuftBuild)
for (i = 0; i < ll.length; i++)
ll[i] = 0;
// read in table lengths
zip_NEEDBITS(5);
nl = 257 + zip_GETBITS(5); // number of literal/length codes
zip_DUMPBITS(5);
zip_NEEDBITS(5);
nd = 1 + zip_GETBITS(5); // number of distance codes
zip_DUMPBITS(5);
zip_NEEDBITS(4);
nb = 4 + zip_GETBITS(4); // number of bit length codes
zip_DUMPBITS(4);
if (nl > 286 || nd > 30)
return -1; // bad lengths
// read in bit-length-code lengths
for (j = 0; j < nb; j++) {
zip_NEEDBITS(3);
ll[zip_border[j]] = zip_GETBITS(3);
zip_DUMPBITS(3);
}
for (; j < 19; j++)
ll[zip_border[j]] = 0;
// build decoding table for trees--single level, 7 bit lookup
zip_bl = 7;
h = new zip_HuftBuild(ll, 19, 19, null, null, zip_bl);
if (h.status != 0)
return -1; // incomplete code set
zip_tl = h.root;
zip_bl = h.m;
// read in literal and distance code lengths
n = nl + nd;
i = l = 0;
while (i < n) {
zip_NEEDBITS(zip_bl);
t = zip_tl.list[zip_GETBITS(zip_bl)];
j = t.b;
zip_DUMPBITS(j);
j = t.n;
if (j < 16) // length of code in bits (0..15)
ll[i++] = l = j; // save last length in l
else if (j == 16) { // repeat last length 3 to 6 times
zip_NEEDBITS(2);
j = 3 + zip_GETBITS(2);
zip_DUMPBITS(2);
if (i + j > n)
return -1;
while (j-- > 0)
ll[i++] = l;
} else if (j == 17) { // 3 to 10 zero length codes
zip_NEEDBITS(3);
j = 3 + zip_GETBITS(3);
zip_DUMPBITS(3);
if (i + j > n)
return -1;
while (j-- > 0)
ll[i++] = 0;
l = 0;
} else { // j == 18: 11 to 138 zero length codes
zip_NEEDBITS(7);
j = 11 + zip_GETBITS(7);
zip_DUMPBITS(7);
if (i + j > n)
return -1;
while (j-- > 0)
ll[i++] = 0;
l = 0;
}
}
// build the decoding tables for literal/length and distance codes
zip_bl = zip_lbits;
h = new zip_HuftBuild(ll, nl, 257, zip_cplens, zip_cplext, zip_bl);
if (zip_bl == 0) // no literals or lengths
h.status = 1;
if (h.status != 0) {
if (h.status == 1)
;// **incomplete literal tree**
return -1; // incomplete code set
}
zip_tl = h.root;
zip_bl = h.m;
for (i = 0; i < nd; i++)
ll[i] = ll[i + nl];
zip_bd = zip_dbits;
h = new zip_HuftBuild(ll, nd, 0, zip_cpdist, zip_cpdext, zip_bd);
zip_td = h.root;
zip_bd = h.m;
if (zip_bd == 0 && nl > 257) { // lengths but no distances
// **incomplete distance tree**
return -1;
}
if (h.status == 1) {
;// **incomplete distance tree**
}
if (h.status != 0)
return -1;
// decompress until an end-of-block code
return zip_inflate_codes(buff, off, size);
}
var zip_inflate_start = function () {
var i;
if (zip_slide == null)
zip_slide = new Array(2 * zip_WSIZE);
zip_wp = 0;
zip_bit_buf = 0;
zip_bit_len = 0;
zip_method = -1;
zip_eof = false;
zip_copy_leng = zip_copy_dist = 0;
zip_tl = null;
}
var zip_inflate_internal = function (buff, off, size) {
// decompress an inflated entry
var n, i;
n = 0;
while (n < size) {
if (zip_eof && zip_method == -1)
return n;
if (zip_copy_leng > 0) {
if (zip_method != zip_STORED_BLOCK) {
// STATIC_TREES or DYN_TREES
while (zip_copy_leng > 0 && n < size) {
zip_copy_leng--;
zip_copy_dist &= zip_WSIZE - 1;
zip_wp &= zip_WSIZE - 1;
buff[off + n++] = zip_slide[zip_wp++] =
zip_slide[zip_copy_dist++];
}
} else {
while (zip_copy_leng > 0 && n < size) {
zip_copy_leng--;
zip_wp &= zip_WSIZE - 1;
zip_NEEDBITS(8);
buff[off + n++] = zip_slide[zip_wp++] = zip_GETBITS(8);
zip_DUMPBITS(8);
}
if (zip_copy_leng == 0)
zip_method = -1; // done
}
if (n == size)
return n;
}
if (zip_method == -1) {
if (zip_eof)
break;
// read in last block bit
zip_NEEDBITS(1);
if (zip_GETBITS(1) != 0)
zip_eof = true;
zip_DUMPBITS(1);
// read in block type
zip_NEEDBITS(2);
zip_method = zip_GETBITS(2);
zip_DUMPBITS(2);
zip_tl = null;
zip_copy_leng = 0;
}
switch (zip_method) {
case 0: // zip_STORED_BLOCK
i = zip_inflate_stored(buff, off + n, size - n);
break;
case 1: // zip_STATIC_TREES
if (zip_tl != null)
i = zip_inflate_codes(buff, off + n, size - n);
else
i = zip_inflate_fixed(buff, off + n, size - n);
break;
case 2: // zip_DYN_TREES
if (zip_tl != null)
i = zip_inflate_codes(buff, off + n, size - n);
else
i = zip_inflate_dynamic(buff, off + n, size - n);
break;
default: // error
i = -1;
break;
}
if (i == -1) {
if (zip_eof)
return 0;
return -1;
}
n += i;
}
return n;
}
var zip_inflate = function (str) {
var i, j;
zip_inflate_start();
zip_inflate_data = str;
zip_inflate_pos = 0;
var buff = new Array(1024);
var aout = [];
while ((i = zip_inflate_internal(buff, 0, buff.length)) > 0) {
var cbuf = new Array(i);
for (j = 0; j < i; j++) {
cbuf[j] = String.fromCharCode(buff[j]);
}
aout[aout.length] = cbuf.join("");
}
zip_inflate_data = null; // G.C.
return aout.join("");
}
if (!ctx.RawDeflate) ctx.RawDeflate = {};
ctx.RawDeflate.inflate = zip_inflate;
})(this);
//base64
(function (global) {
'use strict';
if (global.Base64_Zip) {
//alert("1");
//return;
}
var version = "2.1.1";
// if node.js, we use Buffer
var buffer;
if (typeof module !== 'undefined' && module.exports) {
buffer = require('buffer').Buffer;
}
// constants
var b64chars
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var b64tab = function (bin) {
var t = {};
for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;
return t;
}(b64chars);
var fromCharCode = String.fromCharCode;
// encoder stuff
var cb_utob = function (c) {
if (c.length < 2) {
var cc = c.charCodeAt(0);
return cc < 0x80 ? c
: cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))
+ fromCharCode(0x80 | (cc & 0x3f)))
: (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ fromCharCode(0x80 | (cc & 0x3f)));
} else {
var cc = 0x10000
+ (c.charCodeAt(0) - 0xD800) * 0x400
+ (c.charCodeAt(1) - 0xDC00);
return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))
+ fromCharCode(0x80 | ((cc >>> 12) & 0x3f))
+ fromCharCode(0x80 | ((cc >>> 6) & 0x3f))
+ fromCharCode(0x80 | (cc & 0x3f)));
}
};
var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
var utob = function (u) {
return u.replace(re_utob, cb_utob);
};
var cb_encode = function (ccc) {
var padlen = [0, 2, 1][ccc.length % 3],
ord = ccc.charCodeAt(0) << 16
| ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)
| ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),
chars = [
b64chars.charAt(ord >>> 18),
b64chars.charAt((ord >>> 12) & 63),
padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),
padlen >= 1 ? '=' : b64chars.charAt(ord & 63)
];
return chars.join('');
};
var Base64_btoa = function (b) {
return b.replace(/[\s\S]{1,3}/g, cb_encode);
};
var _encode = buffer
? function (u) {
return (new buffer(u)).toString('base64')
}
: function (u) {
return Base64_btoa(utob(u))
}
;
var encode = function (u, urisafe) {
return !urisafe
? _encode(u)
: _encode(u).replace(/[+\/]/g, function (m0) {
return m0 == '+' ? '-' : '_';
}).replace(/=/g, '');
};
var encodeURI = function (u) {
return encode(u, true)
};
// decoder stuff
var re_btou = new RegExp([
'[\xC0-\xDF][\x80-\xBF]',
'[\xE0-\xEF][\x80-\xBF]{2}',
'[\xF0-\xF7][\x80-\xBF]{3}'
].join('|'), 'g');
var cb_btou = function (cccc) {
switch (cccc.length) {
case 4:
var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
| ((0x3f & cccc.charCodeAt(1)) << 12)
| ((0x3f & cccc.charCodeAt(2)) << 6)
| (0x3f & cccc.charCodeAt(3)),
offset = cp - 0x10000;
return (fromCharCode((offset >>> 10) + 0xD800)
+ fromCharCode((offset & 0x3FF) + 0xDC00));
case 3:
return fromCharCode(
((0x0f & cccc.charCodeAt(0)) << 12)
| ((0x3f & cccc.charCodeAt(1)) << 6)
| (0x3f & cccc.charCodeAt(2))
);
default:
return fromCharCode(
((0x1f & cccc.charCodeAt(0)) << 6)
| (0x3f & cccc.charCodeAt(1))
);
}
};
var btou = function (b) {
return b.replace(re_btou, cb_btou);
};
var cb_decode = function (cccc) {
var len = cccc.length,
padlen = len % 4,
n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)
| (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)
| (len > 2 ? b64tab[cccc.charAt(2)] << 6 : 0)
| (len > 3 ? b64tab[cccc.charAt(3)] : 0),
chars = [
fromCharCode(n >>> 16),
fromCharCode((n >>> 8) & 0xff),
fromCharCode(n & 0xff)
];
chars.length -= [0, 0, 2, 1][padlen];
return chars.join('');
};
var Base64_atob = function (a) {
return a.replace(/[\s\S]{1,4}/g, cb_decode);
};
var _decode = buffer
? function (a) {
return (new buffer(a, 'base64')).toString()
}
: function (a) {
return btou(Base64_atob(a))
};
var decode = function (a) {
return _decode(
a.replace(/[-_]/g, function (m0) {
return m0 == '-' ? '+' : '/'
})
.replace(/[^A-Za-z0-9\+\/]/g, '')
);
};
// export Base64
global.Base64_Zip = {
VERSION: version,
atob: Base64_atob,
btoa: Base64_btoa,
fromBase64: decode,
toBase64: encode,
utob: utob,
encode: encode,
encodeURI: encodeURI,
btou: btou,
decode: decode
};
// if ES5 is available, make Base64.extendString() available
if (typeof Object.defineProperty === 'function') {
var noEnum = function (v) {
return {value: v, enumerable: false, writable: true, configurable: true};
};
global.Base64_Zip.extendString = function () {
Object.defineProperty(
String.prototype, 'fromBase64', noEnum(function () {
return decode(this)
}));
Object.defineProperty(
String.prototype, 'toBase64', noEnum(function (urisafe) {
return encode(this, urisafe)
}));
Object.defineProperty(
String.prototype, 'toBase64URI', noEnum(function () {
return encode(this, true)
}));
};
}
// that's it!
})(this);
//unzip
function unzip(b64Data) {
var strData;
if (!window.atob) {
// strData = $.base64.atob(b64Data)
} else {
// strData = atob(b64Data)
}
var charData;
if (!Array.prototype.map) {
// charData =iemap( strData.split(''),function (x) { return x.charCodeAt(0); },null);
} else {
// charData = strData.split('').map(function (x) { return x.charCodeAt(0); });
}
strData = Base64_Zip.btou(RawDeflate.inflate(Base64_Zip.fromBase64(b64Data)));
// var binData = new Uint8Array(charData);
// var data = pako.inflate(binData);
// strData = String.fromCharCode.apply(null, new Uint16Array(data));
return strData;
}
var com = {};
com.str = {
_KEY: "12345678900000001234567890000000",//32位
_IV: "abcd134556abcedf",//16位
Encrypt: function (str) {
var key = CryptoJS.enc.Utf8.parse(this._KEY);
var iv = CryptoJS.enc.Utf8.parse(this._IV);
var encrypted = '';
var srcs = CryptoJS.enc.Utf8.parse(str);
encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
},
Decrypt: function (str) {
var result = com.str.DecryptInner(str);
try {
var newstr = com.str.DecryptInner(result);
if (newstr != "") {
result = newstr;
}
} catch (ex) {
var msg = ex;
}
return result;
},
DecryptInner: function (str) {
var key = CryptoJS.enc.Utf8.parse(this._KEY);
var iv = CryptoJS.enc.Utf8.parse(this._IV);
var encryptedHexStr = CryptoJS.enc.Hex.parse(str);
var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
var decrypt = CryptoJS.AES.decrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
var result = decryptedStr.toString();
try {
result = Decrypt(result);
} catch (ex) {
var msg = ex;
}
return result;
}
}
function iemap(myarray, callback, thisArg) {
var T, A, k;
if (myarray == null) {
throw new TypeError(" this is null or not defined");
}
var O = Object(myarray);
var len = O.length >>> 0;
if (typeof callback !== "function") {
throw new TypeError(callback + " is not a function");
}
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (thisArg) {
T = thisArg;
}
A = new Array(len);
k = 0;
while (k < len) {
var kValue, mappedValue;
if (k in O) {
kValue = O[k];
mappedValue = callback.call(T, kValue, k, O);
A[k] = mappedValue;
}
k++;
}
return A;
};
//************************用Runeval解密出AES中的_KEY(采用的是jsfuck加密)***************************
// function run(runevalcode){
// runcode = unzip(runevalcode);
// runcode= runcode.substr(0, runcode.length - 1); //要去掉最后的分号;
// data = (/\n(.+)/.exec(eval(runcode.replace(/\s+/, "").slice(0, -2)))[1]);
// key = data.split(";")[0].split("=")[1];
// //去掉首尾的双引号
// key = key.substr(1); //删除第一个字符
// key = key.substr(0, key.length-1);
// return key;
// }
//************************传入runeval加密代码和加密的文书ID************************
function getdocid(runevalcode, id) {
runcode = unzip(runevalcode);
runcode = runcode.substr(0, runcode.length - 1); //要去掉最后的分号;
data = (/\n(.+)/.exec(eval(runcode.replace(/\s+/, "").slice(0, -2)))[1]); //data = setTimeout('com.str._KEY="9f559564142845a4a26adc084f66abda";',8000*Math.random());
key = data.split(";")[0].split("=")[1];
//去掉首尾的双引号
key = key.substr(1); //删除第一个字符
key = key.substr(0, key.length - 1); //Key = "9f559564142845a4a26adc084f66abda"
if (key) {
com.str._KEY = key; //赋予新的key用于AES解密
}
var unzipid = unzip(id);
var realid = com.str.Decrypt(unzipid);
return realid;
}
//调用实例:
//Navi("w61ZS27CgzAQPQtRFsK2wqh6AcKUVcKOw5DDpcOIQhVJExYJwpVDV1HDrl7CoCkBw6MAKcK2w6XClCfCoUHDmMOzecOzZsKMwrFYw67Dk8ONw7bClMOIw7QzX8K9w6UyPcOuXj9kdljDr8Ofw6U6w5tsWRjChCQgwrwWLyABYh4dw7IfEsKZw4lyw4VbCcK1woUAw69gFgLDlQNjKC44ATHCoAPCqcKDHcKQACbCkD8SBk9IDinCoQIQaATDjwXCj8KieMK1SMKyw6MpwpdfScKew4lFFFMsworCi8Kxw7B8KcOVw6rDq3zDocO0Y0nChRAiZEE1w4HCqcOtwrPCnBjCnsKpHsKXwrfDv8O0w4TDisOhQsKDwoJywoYEFTclYFs9wrgaw5wPwqbDoMOWw6rDtmJqesOTwo/Dl8KhKsOUXcKKOhDCtDnDtMO4wq5Bwo5jwrTDsTgIe8Kkw4Yjag/Dq8O+w41gwoLDlVRTwrUeRsO8wrUbw7bCt8O3wo3DgTXCl3gPD8OKworCsxXDkh7Dv3bCqXILw55BGsKaw4ZVw6rDrsKiwp1VKsK1w73DuBQLwqpvJ8KzXsOCwrpiw7ptw4zDuwZ1R8KRwps4NsKCGW1VMsO/wqJ3w4rDrXBEw7dwwoxXw6l5e3XCrsOBPMKKfQXDkMOdYEfCnMKWfGNJcy7DqsOkRcKtTwXDvWjDkyFNOMOZw7nDgRvCoAjDjnjDtA0=","DcKPwrkRADEIA1syB8OmCUFAw78lwp0zKcOQw6wKFQNlV8KHf8KlwpXDnHLDilzCmkvCvQHDl28awpFhOzTCpxPDkkPDuMKifMOaM2s5JcOOdFJgHcOkwpPDolBrw7TCkcK9wpsudRLDicKmZnnDqsOGwrcjw54rVyZewprCoMO+woDCtMOHPMOewrbDhWVvwpXDt8OcT8OHw7xITsORExxOwrchfU4tw5ULwqM7wqY+c0M9W8KFLsOARcOvAsKIw68rPw==")
================================================
FILE: Wenshu_Project/Wenshu/spiders/get_vl5x.js
================================================
//hex_sha1
var hexcase = 0;
/* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = "";
/* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8;
/* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_sha1(s) {
return binb2hex(core_sha1(str2binb(s), s.length * chrsz));
}
function b64_sha1(s) {
return binb2b64(core_sha1(str2binb(s), s.length * chrsz));
}
function str_sha1(s) {
return binb2str(core_sha1(str2binb(s), s.length * chrsz));
}
function hex_hmac_sha1(key, data) {
return binb2hex(core_hmac_sha1(key, data));
}
function b64_hmac_sha1(key, data) {
return binb2b64(core_hmac_sha1(key, data));
}
function str_hmac_sha1(key, data) {
return binb2str(core_hmac_sha1(key, data));
}
/*
* Perform a simple self-test to see if the VM is working
*/
function sha1_vm_test() {
return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}
/*
* Calculate the SHA-1 of an array of big-endian words, and a bit length
*/
function core_sha1(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;
var w = Array(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
for (var j = 0; j < 80; j++) {
if (j < 16) w[j] = x[i + j];
else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rol(b, 30);
b = a;
a = t;
}
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return Array(a, b, c, d, e);
}
/*
* Perform the appropriate triplet combination function for the current
* iteration
*/
function sha1_ft(t, b, c, d) {
if (t < 20) return (b & c) | ((~b) & d);
if (t < 40) return b ^ c ^ d;
if (t < 60) return (b & c) | (b & d) | (c & d);
return b ^ c ^ d;
}
/*
* Determine the appropriate additive constant for the current iteration
*/
function sha1_kt(t) {
return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
}
/*
* Calculate the HMAC-SHA1 of a key and some data
*/
function core_hmac_sha1(key, data) {
var bkey = str2binb(key);
if (bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
var ipad = Array(16),
opad = Array(16);
for (var i = 0; i < 16; i++) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
return core_sha1(opad.concat(hash), 512 + 160);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert an 8-bit or 16-bit string to an array of big-endian words
* In 8-bit function, characters >255 have their hi-byte silently ignored.
*/
function str2binb(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i % 32);
return bin;
}
/*
* Convert an array of big-endian words to a string
*/
function binb2str(bin) {
var str = "";
var mask = (1 << chrsz) - 1;
for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (24 - i % 32)) & mask);
return str;
}
/*
* Convert an array of big-endian words to a hex string.
*/
function binb2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF": "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);
}
return str;
}
/*
* Convert an array of big-endian words to a base-64 string
*/
function binb2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8 * (3 - i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * (3 - (i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * (3 - (i + 2) % 4)) & 0xFF);
for (var j = 0; j < 4; j++) {
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
}
}
return str;
}
//hex_md5
var hexcase = 0;
/* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = "";
/* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8;
/* bits per input character. 8 - ASCII; 16 - Unicode */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s) {
return binl2hex(core_md5(str2binl(s), s.length * chrsz));
}
function b64_md5(s) {
return binl2b64(core_md5(str2binl(s), s.length * chrsz));
}
function str_md5(s) {
return binl2str(core_md5(str2binl(s), s.length * chrsz));
}
function hex_hmac_md5(key, data) {
return binl2hex(core_hmac_md5(key, data));
}
function b64_hmac_md5(key, data) {
return binl2b64(core_hmac_md5(key, data));
}
function str_hmac_md5(key, data) {
return binl2str(core_hmac_md5(key, data));
}
/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test() {
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data) {
var bkey = str2binl(key);
if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
var ipad = Array(16),
opad = Array(16);
for (var i = 0; i < 16; i++) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
return core_md5(opad.concat(hash), 512 + 128);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
*/
function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
return bin;
}
/*
* Convert an array of little-endian words to a string
*/
function binl2str(bin) {
var str = "";
var mask = (1 << chrsz) - 1;
for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);
return str;
}
/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF": "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
}
return str;
}
/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
for (var j = 0; j < 4; j++) {
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
}
}
return str;
}
//Base64
function Base64() {
// private property
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function(input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
}
// public method for decoding
this.decode = function(input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = _keyStr.indexOf(input.charAt(i++));
enc2 = _keyStr.indexOf(input.charAt(i++));
enc3 = _keyStr.indexOf(input.charAt(i++));
enc4 = _keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = _utf8_decode(output);
return output;
}
// private method for UTF-8 encoding
_utf8_encode = function(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
// private method for UTF-8 decoding
_utf8_decode = function(utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
} else if ((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i + 1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
} else {
c2 = utftext.charCodeAt(i + 1);
c3 = utftext.charCodeAt(i + 2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
//eval_1
function strToLong(str) {
var long = 0;
for (var i = 0; i < str.length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
return long
}
function strToLongEn(str) {
var long = 0;
for (var i = 0; i < str.length; i++) {
long += (str.charCodeAt(i) << (i % 16)) + i
}
return long
}
function strToLongEn2(str, step) {
var long = 0;
for (var i = 0; i < str.length; i++) {
long += (str.charCodeAt(i) << (i % 16)) + (i * step)
}
return long
}
function strToLongEn3(str, step) {
var long = 0;
for (var i = 0; i < str.length; i++) {
long += (str.charCodeAt(i) << (i % 16)) + (i + step - str.charCodeAt(i))
}
return long
}
function makeKey_0(str) {
var str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr( - 4);
var b = str.substr(4) + a.substr( - 6);
return hex_md5(str).substr(4, 24)
}
function makeKey_1(str) {
var str = str.substr(5, 5 * 5) + "5" + str.substr(1, 2) + "1" + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr(4);
var b = str.substr(12) + a.substr( - 6);
var c = str.substr(4) + a.substr(6);
return hex_md5(c).substr(4, 24)
}
function makeKey_2(str) {
var str = str.substr(5, 5 * 5) + "15" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLong(str.substr(5)) + str.substr(4);
var b = strToLong(str.substr(5)) + str.substr(4);
var c = str.substr(4) + b.substr(5);
return hex_md5(c).substr(1, 24)
}
function makeKey_3(str) {
var str = str.substr(5, 5 * 5) + "15" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLongEn(str.substr(5)) + str.substr(4);
var b = str.substr(4) + a.substr(5);
var c = strToLong(str.substr(5)) + str.substr(4);
return hex_md5(b).substr(3, 24)
}
function makeKey_4(str) {
var str = str.substr(5, 5 * 5) + "2" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLong(a.substr(5));
return hex_md5(b).substr(3, 24)
}
function makeKey_5(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5) + str.substr(1, 2) + "1") + str.substr((5 + 1) * (5 + 1), 3);
var a = strToLongEn(str.substr(4, 10)) + str.substr( - 4);
var b = hex_md5(str.substr(4)) + a.substr(2);
var a = str.substr(3);
var c = strToLong(str.substr(5)) + str.substr(4);
var aa = long + str.substr(4);
var long = 0;
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 12)) + i
}
a = long + "" + str.substr(4);
return hex_md5(str).substr(4, 24)
}
//2
function makeKey_6(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5) + str.substr((5 + 1) * (5 + 1), 3);
var a = base.encode(str.substr(4, 10)) + str.substr(2);
var b = str.substr(6) + a.substr(2);
var c = strToLong(str.substr(5)) + str.substr(4);
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(4);
return hex_md5(b).substr(2, 24)
}
function makeKey_7(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 4) + "55" + str.substr(1, 2)) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16 + 5)) + 3 + 5
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLong(a.substr(5));
return hex_md5(b).substr(3, 24)
}
function makeKey_8(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5 - 1) + "5" + "-" + "5") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + strToLongEn(a.substr(5));
return hex_md5(b).substr(4, 24)
}
function makeKey_9(str) {
var str = str.substr(5, 5 * 5) + "5" + str.substr(1, 2) + "1" + str.substr((5 + 1) * (5 + 1), 3);
var a = str.substr(5) + str.substr(4);
var b = str.substr(12) + a.substr( - 6);
var c = hex_sha1(str.substr(4)) + a.substr(6);
return hex_md5(c).substr(4, 24)
}
function makeKey_10(str) {
var base = new Base64();
var str = base.encode(str.substr(5, 5 * 5 - 1) + "5") + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(4);
var b = hex_md5(str.substr(1)) + hex_sha1(a.substr(5));
return hex_md5(b).substr(4, 24)
}
function makeKey_11(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2) + str.substr((5 + 1) * (5 + 1), 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = str.substr(1) + hex_sha1(a.substr(5));
return hex_md5(b).substr(2, 24)
}
function makeKey_12(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + str.substr((5 + 1) * (5 + 1), 3) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = str.substr(1) + hex_sha1(str.substr(5));
return hex_md5(b).substr(1, 24)
}
function makeKey_13(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(str.substr(1) + hex_sha1(str.substr(5)));
return hex_md5(b).substr(1, 24)
}
function makeKey_14(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(str.substr(1) + str.substr(5) + str.substr(1, 3));
return hex_sha1(b).substr(1, 24)
}
function makeKey_15(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 16))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16))
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1) + str.substr(5) + str.substr(2, 3));
return hex_sha1(b).substr(1, 24)
}
function makeKey_16(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "2" + str.substr(1, 2) + "-" + "5";
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5) + str.substr(2, 3);
return hex_md5(b).substr(2, 24)
}
function makeKey_17(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(1, 2) + "-" + "5";
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = base.encode(a.substr(1)) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_18(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(1, 2) + "5" + str.substr(2 + 5, 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = a.substr(1) + strToLongEn2(str.substr(5), 5 + 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_19(str) {
var base = new Base64();
var str = str.substr(5, 5 * 5 - 1) + "7" + str.substr(5, 2) + "5" + str.substr(2 + 5, 3);
var long = 0;
for (var i = 0; i < str.substr(1).length; i++) {
long += (str.charCodeAt(i) << (i % 11))
}
var aa = long + str.substr(4);
var long = 0;
var a = str.substr(5);
for (var i = 0; i < a.length; i++) {
long += (a.charCodeAt(i) << (i % 16)) + i
}
a = long + "" + str.substr(2);
var b = a.substr(1) + strToLongEn3(str.substr(5), 5 - 1) + str.substr(2 + 5, 3);
return hex_md5(b).substr(0, 24)
}
function makeKey_20(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
//3
function makeKey_21(str) {
return hex_md5(makeKey_11(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_22(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_23(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_24(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_25(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_26(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_27(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_28(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_29(str) {
return hex_md5(makeKey_19(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_30(str) {
return hex_md5(makeKey_0(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_31(str) {
return hex_md5(makeKey_1(str) + makeKey_8(str)).substr(4, 24)
}
function makeKey_32(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_33(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(4, 24)
}
function makeKey_34(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_35(str) {
return hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_36(str) {
return hex_md5(makeKey_8(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_37(str) {
return hex_md5(makeKey_6(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_38(str) {
return hex_md5(makeKey_12(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_39(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_40(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_41(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_42(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_43(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_44(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_45(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_46(str) {
return hex_md5(makeKey_19(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_47(str) {
return hex_md5(makeKey_0(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_48(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_49(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_50(str) {
return hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_51(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_52(str) {
return hex_md5(makeKey_7(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_53(str) {
return hex_md5(makeKey_12(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_54(str) {
return hex_md5(makeKey_14(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_55(str) {
return hex_md5(makeKey_15(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_56(str) {
return hex_md5(makeKey_16(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_57(str) {
return hex_md5(makeKey_9(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_58(str) {
return hex_md5(makeKey_10(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_59(str) {
return hex_md5(makeKey_17(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_60(str) {
return hex_md5(makeKey_18(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_61(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_62(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_63(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_64(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_65(str) {
return hex_md5(makeKey_14(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_66(str) {
return hex_md5(makeKey_15(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_67(str) {
return hex_md5(makeKey_16(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_68(str) {
return hex_md5(makeKey_9(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_69(str) {
return hex_md5(makeKey_10(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_70(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_71(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_72(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_73(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(1, 24)
}
function makeKey_74(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(2, 24)
}
function makeKey_75(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_76(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_77(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_78(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_79(str) {
return hex_md5(makeKey_10(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_80(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_81(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_82(str) {
return hex_md5(makeKey_14(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_83(str) {
return hex_md5(makeKey_15(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_84(str) {
return hex_md5(makeKey_16(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_85(str) {
return hex_md5(makeKey_9(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_86(str) {
return hex_md5(makeKey_10(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_87(str) {
return hex_md5(makeKey_14(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_88(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_89(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_90(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_91(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_92(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_93(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_94(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_95(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_96(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_97(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_98(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_99(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_100(str) {
return hex_md5(makeKey_7(str) + makeKey_3(str)).substr(1, 24)
}
function makeKey_101(str) {
return hex_md5(makeKey_10(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_102(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_103(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_104(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_105(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_106(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_107(str) {
return hex_md5(makeKey_14(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_108(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_109(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_110(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_111(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_112(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_113(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_114(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_115(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_116(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_117(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_118(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_119(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_120(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_121(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_122(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_123(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_124(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_125(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_126(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_127(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_128(str) {
return hex_md5(makeKey_7(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_129(str) {
return hex_md5(makeKey_8(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_130(str) {
return hex_md5(makeKey_14(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_131(str) {
return hex_md5(makeKey_15(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_132(str) {
return hex_md5(makeKey_16(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_133(str) {
return hex_md5(makeKey_9(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_134(str) {
return hex_md5(makeKey_10(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_135(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_136(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_137(str) {
return hex_md5(makeKey_19(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_138(str) {
return hex_md5(makeKey_0(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_139(str) {
return hex_md5(makeKey_1(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_140(str) {
return hex_md5(makeKey_4(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_141(str) {
return hex_md5(makeKey_5(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_142(str) {
return hex_md5(makeKey_3(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_143(str) {
return hex_md5(makeKey_7(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_144(str) {
return hex_md5(makeKey_17(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_145(str) {
return hex_md5(makeKey_18(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_146(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_147(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_148(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_149(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_150(str) {
return hex_md5(makeKey_14(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_151(str) {
return hex_md5(makeKey_15(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_152(str) {
return hex_md5(makeKey_16(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_153(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_154(str) {
return hex_md5(makeKey_10(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_155(str) {
return hex_md5(makeKey_17(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_156(str) {
return hex_md5(makeKey_18(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_157(str) {
return hex_md5(makeKey_19(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_158(str) {
return hex_md5(makeKey_0(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_159(str) {
return hex_md5(makeKey_1(str) + makeKey_8(str)).substr(2, 24)
}
function makeKey_160(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_161(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(4, 24)
}
function makeKey_162(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_163(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_164(str) {
return hex_md5(makeKey_4(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_165(str) {
return hex_md5(makeKey_5(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_166(str) {
return hex_md5(makeKey_3(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_167(str) {
return hex_md5(makeKey_7(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_168(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_169(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_170(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_171(str) {
return hex_md5(makeKey_17(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_172(str) {
return hex_md5(makeKey_18(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_173(str) {
return hex_md5(makeKey_19(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_174(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_175(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_176(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_177(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_178(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_179(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_180(str) {
return hex_md5(makeKey_18(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_181(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_182(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_183(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_184(str) {
return hex_md5(makeKey_4(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_185(str) {
return hex_md5(makeKey_14(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_186(str) {
return hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_187(str) {
return hex_md5(makeKey_16(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_188(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_189(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_190(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_191(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_192(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_193(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_194(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_195(str) {
return hex_md5(makeKey_4(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_196(str) {
return hex_md5(makeKey_5(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_197(str) {
return hex_md5(makeKey_3(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_198(str) {
return hex_md5(makeKey_3(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_199(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_200(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_201(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_202(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_203(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_204(str) {
return hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_205(str) {
return hex_md5(makeKey_14(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_206(str) {
return hex_md5(makeKey_15(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_207(str) {
return hex_md5(makeKey_16(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_208(str) {
return hex_md5(makeKey_9(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_209(str) {
return hex_md5(makeKey_10(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_210(str) {
return hex_md5(makeKey_17(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_211(str) {
return hex_md5(makeKey_18(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_212(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_213(str) {
return hex_md5(makeKey_0(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_214(str) {
return hex_md5(makeKey_1(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_215(str) {
return hex_md5(makeKey_4(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_216(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_217(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_218(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_219(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_220(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_221(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_222(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_223(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_224(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(2, 24)
}
//4
function makeKey_225(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(3, 24)
}
function makeKey_226(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)
}
function makeKey_227(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_228(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_229(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_230(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_231(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_232(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_233(str) {
return hex_md5(makeKey_10(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_234(str) {
return hex_md5(makeKey_17(str) + makeKey_15(str)).substr(2, 24)
}
function makeKey_235(str) {
return hex_md5(makeKey_18(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_236(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(4, 24)
}
function makeKey_237(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(1, 24)
}
function makeKey_238(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_239(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_240(str) {
return hex_md5(makeKey_14(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_241(str) {
return hex_md5(makeKey_15(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_242(str) {
return hex_md5(makeKey_16(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_243(str) {
return hex_md5(makeKey_9(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_244(str) {
return hex_md5(makeKey_10(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_245(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(4, 24)
}
function makeKey_246(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_247(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_248(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_249(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_250(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_251(str) {
return hex_md5(makeKey_19(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_252(str) {
return hex_md5(makeKey_0(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_253(str) {
return hex_md5(makeKey_1(str) + makeKey_15(str)).substr(2, 24)
}
//5
function makeKey_254(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_255(str) {
return hex_md5(makeKey_5(str) + makeKey_14(str)).substr(4, 24)
}
function makeKey_256(str) {
return hex_md5(makeKey_3(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_257(str) {
return hex_md5(makeKey_7(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_258(str) {
return hex_md5(makeKey_0(str) + makeKey_9(str)).substr(1, 24)
}
function makeKey_259(str) {
return hex_md5(makeKey_1(str) + makeKey_10(str)).substr(2, 24)
}
function makeKey_260(str) {
return hex_md5(makeKey_4(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_261(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_262(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_263(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_264(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_265(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_266(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_267(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_268(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_269(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_270(str) {
return hex_md5(makeKey_18(str) + makeKey_14(str)).substr(2, 24)
}
function makeKey_271(str) {
return hex_md5(makeKey_19(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_272(str) {
return hex_md5(makeKey_0(str) + makeKey_16(str)).substr(4, 24)
}
function makeKey_273(str) {
return hex_md5(makeKey_1(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_274(str) {
return hex_md5(makeKey_19(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_275(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_276(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_277(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_278(str) {
return hex_md5(makeKey_5(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_279(str) {
return hex_md5(makeKey_3(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_280(str) {
return hex_md5(makeKey_7(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_281(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_282(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_283(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_284(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_285(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_286(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_287(str) {
return hex_md5(makeKey_14(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_288(str) {
return hex_md5(makeKey_15(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_289(str) {
return hex_md5(makeKey_16(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_290(str) {
return hex_md5(makeKey_9(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_291(str) {
return hex_md5(makeKey_10(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_292(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_293(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_294(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
//6
function makeKey_295(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_296(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_297(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_298(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_299(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(4, 24)
}
function makeKey_300(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(1, 24)
}
function makeKey_301(str) {
return hex_md5(makeKey_7(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_302(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_303(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_304(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_305(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_306(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_307(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_308(str) {
return hex_md5(k(0) + makeKey_14(str)).substr(2, 24)
}
function makeKey_309(str) {
return hex_md5(makeKey_15(str) + makeKey_15(str)).substr(3, 24)
}
function makeKey_310(str) {
return hex_md5(makeKey_16(str) + makeKey_16(str)).substr(1, 24)
}
function makeKey_311(str) {
return hex_md5(makeKey_9(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_312(str) {
return hex_md5(makeKey_10(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_313(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_314(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_315(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(2, 24)
}
function makeKey_316(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(3, 24)
}
function makeKey_317(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_318(str) {
return hex_md5(makeKey_5(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_319(str) {
return hex_md5(makeKey_3(str) + makeKey_3(str)).substr(3, 24)
}
function makeKey_320(str) {
return hex_md5(makeKey_7(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_321(str) {
return hex_md5(makeKey_17(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_322(str) {
return hex_md5(makeKey_18(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_323(str) {
return hex_md5(makeKey_19(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_324(str) {
return hex_md5(makeKey_0(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_325(str) {
return hex_md5(makeKey_1(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_326(str) {
return hex_md5(makeKey_4(str) + makeKey_4(str)).substr(4, 24)
}
function makeKey_327(str) {
return hex_md5(makeKey_19(str) + makeKey_14(str)).substr(1, 24)
}
function makeKey_328(str) {
return hex_md5(makeKey_0(str) + makeKey_15(str)).substr(2, 24)
}
function makeKey_329(str) {
return hex_md5(makeKey_1(str) + makeKey_16(str)).substr(3, 24)
}
function makeKey_330(str) {
return hex_md5(makeKey_4(str) + makeKey_9(str)).substr(4, 24)
}
function makeKey_331(str) {
return hex_md5(makeKey_19(str) + makeKey_10(str)).substr(1, 24)
}
function makeKey_332(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_333(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_334(str) {
return hex_md5(makeKey_4(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_335(str) {
return hex_md5(makeKey_5(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_336(str) {
return hex_md5(makeKey_3(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_337(str) {
return hex_md5(makeKey_7(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_338(str) {
return hex_md5(makeKey_0(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_339(str) {
return hex_md5(makeKey_1(str) + makeKey_5(str)).substr(1, 24)
}
function makeKey_340(str) {
return hex_md5(makeKey_4(str) + makeKey_3(str)).substr(2, 24)
}
function makeKey_341(str) {
return hex_md5(makeKey_17(str) + makeKey_7(str)).substr(3, 24)
}
function makeKey_342(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_343(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_344(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_345(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_346(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_347(str) {
return hex_md5(makeKey_9(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_348(str) {
return hex_md5(makeKey_10(str) + makeKey_14(str)).substr(3, 24)
}
function makeKey_349(str) {
return hex_md5(makeKey_17(str) + makeKey_15(str)).substr(1, 24)
}
function makeKey_350(str) {
return hex_md5(makeKey_18(str) + makeKey_16(str)).substr(2, 24)
}
function makeKey_351(str) {
return hex_md5(makeKey_19(str) + makeKey_9(str)).substr(3, 24)
}
function makeKey_352(str) {
return hex_md5(makeKey_0(str) + makeKey_10(str)).substr(4, 24)
}
function makeKey_353(str) {
return hex_md5(makeKey_1(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_354(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_355(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_356(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_357(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_358(str) {
return hex_md5(makeKey_4(str) + makeKey_5(str)).substr(3, 24)
}
function makeKey_359(str) {
return hex_md5(makeKey_5(str) + makeKey_3(str)).substr(4, 24)
}
function makeKey_360(str) {
return hex_md5(makeKey_3(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_361(str) {
return hex_md5(makeKey_7(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_362(str) {
return hex_md5(makeKey_17(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_363(str) {
return hex_md5(makeKey_18(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_364(str) {
return hex_md5(makeKey_19(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_365(str) {
return hex_md5(makeKey_0(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_366(str) {
return hex_md5(makeKey_1(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_367(str) {
return hex_md5(makeKey_4(str) + makeKey_7(str)).substr(2, 24)
}
function makeKey_368(str) {
return hex_md5(k(0) + makeKey_17(str)).substr(3, 24)
}
function makeKey_369(str) {
return hex_md5(makeKey_15(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_370(str) {
return hex_md5(makeKey_16(str) + makeKey_19(str)).substr(1, 24)
}
function makeKey_371(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_372(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(1, 24)
}
function makeKey_373(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(2, 24)
}
function makeKey_374(str) {
return hex_md5(makeKey_19(str) + makeKey_17(str)).substr(3, 24)
}
function makeKey_375(str) {
return hex_md5(makeKey_0(str) + makeKey_18(str)).substr(4, 24)
}
function makeKey_376(str) {
return hex_md5(makeKey_1(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_377(str) {
return hex_md5(makeKey_4(str) + makeKey_0(str)).substr(4, 24)
}
function makeKey_378(str) {
return hex_md5(makeKey_5(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_379(str) {
return hex_md5(makeKey_3(str) + makeKey_4(str)).substr(1, 24)
}
function makeKey_380(str) {
return hex_md5(makeKey_7(str) + makeKey_9(str)).substr(2, 24)
}
function makeKey_381(str) {
return hex_md5(makeKey_17(str) + makeKey_10(str)).substr(3, 24)
}
function makeKey_382(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_383(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_384(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(2, 24)
}
function makeKey_385(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(3, 24)
}
function makeKey_386(str) {
return hex_md5(makeKey_4(str) + makeKey_1(str)).substr(4, 24)
}
function makeKey_387(str) {
return hex_md5(makeKey_17(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_388(str) {
return hex_md5(makeKey_18(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_389(str) {
return hex_md5(makeKey_19(str) + makeKey_7(str)).substr(1, 24)
}
function makeKey_390(str) {
return hex_md5(makeKey_0(str) + makeKey_17(str)).substr(2, 24)
}
function makeKey_391(str) {
return hex_md5(makeKey_1(str) + makeKey_18(str)).substr(3, 24)
}
function makeKey_392(str) {
return hex_md5(makeKey_4(str) + makeKey_19(str)).substr(4, 24)
}
function makeKey_393(str) {
return hex_md5(makeKey_9(str) + makeKey_0(str)).substr(1, 24)
}
function makeKey_394(str) {
return hex_md5(makeKey_10(str) + makeKey_1(str)).substr(2, 24)
}
function makeKey_395(str) {
return hex_md5(makeKey_17(str) + makeKey_4(str)).substr(3, 24)
}
function makeKey_396(str) {
return hex_md5(makeKey_18(str) + makeKey_17(str)).substr(4, 24)
}
function makeKey_397(str) {
return hex_md5(makeKey_19(str) + makeKey_18(str)).substr(1, 24)
}
function makeKey_398(str) {
return hex_md5(makeKey_0(str) + makeKey_19(str)).substr(3, 24)
}
function makeKey_399(str) {
return hex_md5(makeKey_1(str) + makeKey_0(str)).substr(1, 24)
}
//7
//var cookie = getCookie('vjkl5');
var arrFun = [makeKey_0, makeKey_1, makeKey_2, makeKey_3, makeKey_4, makeKey_5, makeKey_6, makeKey_7, makeKey_8, makeKey_9, makeKey_10, makeKey_11, makeKey_12, makeKey_13, makeKey_14, makeKey_15, makeKey_16, makeKey_17, makeKey_18, makeKey_19, makeKey_20, makeKey_21, makeKey_22, makeKey_23, makeKey_24, makeKey_25, makeKey_26, makeKey_27, makeKey_28, makeKey_29, makeKey_30, makeKey_31, makeKey_32, makeKey_33, makeKey_34, makeKey_35, makeKey_36, makeKey_37, makeKey_38, makeKey_39, makeKey_40, makeKey_41, makeKey_42, makeKey_43, makeKey_44, makeKey_45, makeKey_46, makeKey_47, makeKey_48, makeKey_49, makeKey_50, makeKey_51, makeKey_52, makeKey_53, makeKey_54, makeKey_55, makeKey_56, makeKey_57, makeKey_58, makeKey_59, makeKey_60, makeKey_61, makeKey_62, makeKey_63, makeKey_64, makeKey_65, makeKey_66, makeKey_67, makeKey_68, makeKey_69, makeKey_70, makeKey_71, makeKey_72, makeKey_73, makeKey_74, makeKey_75, makeKey_76, makeKey_77, makeKey_78, makeKey_79, makeKey_80, makeKey_81, makeKey_82, makeKey_83, makeKey_84, makeKey_85, makeKey_86, makeKey_87, makeKey_88, makeKey_89, makeKey_90, makeKey_91, makeKey_92, makeKey_93, makeKey_94, makeKey_95, makeKey_96, makeKey_97, makeKey_98, makeKey_99, makeKey_100, makeKey_101, makeKey_102, makeKey_103, makeKey_104, makeKey_105, makeKey_106, makeKey_107, makeKey_108, makeKey_109, makeKey_110, makeKey_111, makeKey_112, makeKey_113, makeKey_114, makeKey_115, makeKey_116, makeKey_117, makeKey_118, makeKey_119, makeKey_120, makeKey_121, makeKey_122, makeKey_123, makeKey_124, makeKey_125, makeKey_126, makeKey_127, makeKey_128, makeKey_129, makeKey_130, makeKey_131, makeKey_132, makeKey_133, makeKey_134, makeKey_135, makeKey_136, makeKey_137, makeKey_138, makeKey_139, makeKey_140, makeKey_141, makeKey_142, makeKey_143, makeKey_144, makeKey_145, makeKey_146, makeKey_147, makeKey_148, makeKey_149, makeKey_150, makeKey_151, makeKey_152, makeKey_153, makeKey_154, makeKey_155, makeKey_156, makeKey_157, makeKey_158, makeKey_159, makeKey_160, makeKey_161, makeKey_162, makeKey_163, makeKey_164, makeKey_165, makeKey_166, makeKey_167, makeKey_168, makeKey_169, makeKey_170, makeKey_171, makeKey_172, makeKey_173, makeKey_174, makeKey_175, makeKey_176, makeKey_177, makeKey_178, makeKey_179, makeKey_180, makeKey_181, makeKey_182, makeKey_183, makeKey_184, makeKey_185, makeKey_186, makeKey_187, makeKey_188, makeKey_189, makeKey_190, makeKey_191, makeKey_192, makeKey_193, makeKey_194, makeKey_195, makeKey_196, makeKey_197, makeKey_198, makeKey_199, makeKey_200, makeKey_201, makeKey_202, makeKey_203, makeKey_204, makeKey_205, makeKey_206, makeKey_207, makeKey_208, makeKey_209, makeKey_210, makeKey_211, makeKey_212, makeKey_213, makeKey_214, makeKey_215, makeKey_216, makeKey_217, makeKey_218, makeKey_219, makeKey_220, makeKey_221, makeKey_222, makeKey_223, makeKey_224, makeKey_225, makeKey_226, makeKey_227, makeKey_228, makeKey_229, makeKey_230, makeKey_231, makeKey_232, makeKey_233, makeKey_234, makeKey_235, makeKey_236, makeKey_237, makeKey_238, makeKey_239, makeKey_240, makeKey_241, makeKey_242, makeKey_243, makeKey_244, makeKey_245, makeKey_246, makeKey_247, makeKey_248, makeKey_249, makeKey_250, makeKey_251, makeKey_252, makeKey_253, makeKey_254, makeKey_255, makeKey_256, makeKey_257, makeKey_258, makeKey_259, makeKey_260, makeKey_261, makeKey_262, makeKey_263, makeKey_264, makeKey_265, makeKey_266, makeKey_267, makeKey_268, makeKey_269, makeKey_270, makeKey_271, makeKey_272, makeKey_273, makeKey_274, makeKey_275, makeKey_276, makeKey_277, makeKey_278, makeKey_279, makeKey_280, makeKey_281, makeKey_282, makeKey_283, makeKey_284, makeKey_285, makeKey_286, makeKey_287, makeKey_288, makeKey_289, makeKey_290, makeKey_291, makeKey_292, makeKey_293, makeKey_294, makeKey_295, makeKey_296, makeKey_297, makeKey_298, makeKey_299, makeKey_300, makeKey_301, makeKey_302, makeKey_303, makeKey_304, makeKey_305, makeKey_306, makeKey_307, makeKey_308, makeKey_309, makeKey_310, makeKey_311, makeKey_312, makeKey_313, makeKey_314, makeKey_315, makeKey_316, makeKey_317, makeKey_318, makeKey_319, makeKey_320, makeKey_321, makeKey_322, makeKey_323, makeKey_324, makeKey_325, makeKey_326, makeKey_327, makeKey_328, makeKey_329, makeKey_330, makeKey_331, makeKey_332, makeKey_333, makeKey_334, makeKey_335, makeKey_336, makeKey_337, makeKey_338, makeKey_339, makeKey_340, makeKey_341, makeKey_342, makeKey_343, makeKey_344, makeKey_345, makeKey_346, makeKey_347, makeKey_348, makeKey_349, makeKey_350, makeKey_351, makeKey_352, makeKey_353, makeKey_354, makeKey_355, makeKey_356, makeKey_357, makeKey_358, makeKey_359, makeKey_360, makeKey_361, makeKey_362, makeKey_363, makeKey_364, makeKey_365, makeKey_366, makeKey_367, makeKey_368, makeKey_369, makeKey_370, makeKey_371, makeKey_372, makeKey_373, makeKey_374, makeKey_375, makeKey_376, makeKey_377, makeKey_378, makeKey_379, makeKey_380, makeKey_381, makeKey_382, makeKey_383, makeKey_384, makeKey_385, makeKey_386, makeKey_387, makeKey_388, makeKey_389, makeKey_390, makeKey_391, makeKey_392, makeKey_393, makeKey_394, makeKey_395, makeKey_396, makeKey_397, makeKey_398, makeKey_399];
//var funIndex = strToLong(cookie) % arrFun.length;
//var fun = arrFun[funIndex];
//var result = fun(cookie);
//注意:修改的地方:
// 1. 添加前面的加密方法(base64,hex_sha1,hex_md5)
// 2. 注释掉var cookie = getCookie('vjkl5'); 直接传入cookie中'vjl5'字段的值
// 3.有的hex_md5(makeKey_4(str) + makeKey_19(str)).substr(3, 24)变成了hex_md5(c0 +...., 就会报错c未定义 ; 解决办法就是直接去网页调试getkey() ,进入虚拟的函数中,查看对应的值,发现c(0)应该换成makeKey_4(str)
//**************************传入cookie中的'vjl5'字段的值*********************
function getvl5x(cookie) {
// var vl = getCookie(cookie) //cookie中的'vjl5'字段的值
var funIndex = strToLong(cookie) % arrFun.length;
var fun = arrFun[funIndex];
var result = fun(cookie);
return result;
}
================================================
FILE: Wenshu_Project/Wenshu/spiders/wenshu.py
================================================
# -*- coding: utf-8 -*-
import scrapy, time, json, re, math, execjs
from Wenshu.items import WenshuCaseItem
class WenshuSpider(scrapy.Spider):
name = 'wenshu'
# allowed_domains = ['wenshu.court.gov.cn']
start_urls = ['http://wenshu.court.gov.cn/list/list/?sorttype=1']
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.year_list = ['1996', '1997', '1998', '1999', '2000']
self.guid = 'aaaabbbb-aaaa-aaaabbbb-aaaabbbbcccc'
with open('Wenshu\spiders\get_vl5x.js', encoding='utf-8') as f:
jsdata_1 = f.read()
with open('Wenshu\spiders\get_docid.js', encoding='utf-8') as f:
jsdata_2 = f.read()
self.js_1 = execjs.compile(jsdata_1)
self.js_2 = execjs.compile(jsdata_2)
def parse(self, response):
'''获取cookie'''
try:
vjkl5 = response.headers['Set-Cookie'].decode('utf-8')
vjkl5 = vjkl5.split(';')[0].split('=')[1]
url_num = 'http://wenshu.court.gov.cn/ValiCode/GetCode'
data = {
'guid': self.guid
}
yield scrapy.FormRequest(url_num, formdata=data, meta={'vjkl5': vjkl5}, callback=self.get_count,
dont_filter=True)
except:
yield scrapy.Request(WenshuSpider.start_urls, callback=self.parse, dont_filter=True)
def get_count(self, response):
'''获取案件数目,设置请求页数'''
number = response.text
vjkl5 = response.meta['vjkl5']
vl5x = self.js_1.call('getvl5x', vjkl5)
url = 'http://wenshu.court.gov.cn/List/ListContent'
for year in self.year_list:
data = {
'Param': '裁判年份:{}'.format(year), # 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)
'Index': '1', # 页数
'Page': '0', # 只为了获取案件数目,所有请求0条就行了
'Order': '裁判日期', # 排序类型(1.法院层级/2.裁判日期/3.审判程序)
'Direction': 'asc', # 排序方式(1.asc:从小到大/2.desc:从大到小)
'vl5x': vl5x,
'number': number,
'guid': self.guid
}
headers = {
'Cookie': 'vjkl5=' + response.meta['vjkl5'], # 在这单独添加cookie,settings中就可以禁用cookie,防止跟踪被ban
'Host': 'wenshu.court.gov.cn',
'Origin': 'http://wenshu.court.gov.cn',
}
# print(response.request.headers.getlist('Cookie'))
yield scrapy.FormRequest(url, formdata=data,
meta={'vl5x': vl5x, 'vjkl5': vjkl5, 'number': number, 'year': year},
callback=self.get_content, headers=headers, dont_filter=True)
def get_content(self, response):
'''获取每页的案件'''
html = response.text
result = eval(json.loads(html))
count = result[0]['Count']
print('******* {}年:该筛选条件下共有多少条数据:{} ********'.format(response.meta['year'], count))
page = math.ceil(int(count) / 10) # 向上取整,每页10条
for i in range(1, int(page) + 1):
if i <= 20: # max:10*20=200 ; 20181005 -只能爬取20页,每页10条!!!
url = 'http://wenshu.court.gov.cn/List/ListContent'
data = {
'Param': '裁判年份:{}'.format(response.meta['year']),
# 检索筛选条件 (多条件筛选: 裁判年份:2018,中级法院:北京市第一中级人民法院,审判程序:一审,关键词:返还)
'Index': str(i), # 页数
'Page': '10', # 每页显示的条目数
'Order': '裁判日期', # 排序类型(1.法院层级/2.裁判日期/3.审判程序)
'Direction': 'asc', # 排序方式(1.asc:从小到大/2.desc:从大到小)
'vl5x': response.meta['vl5x'], # 保存1个小时
'number': response.meta['number'], # 每次都要请求一次GetCode,获取number带入
'guid': self.guid
}
headers = {
'Cookie': 'vjkl5=' + response.meta['vjkl5'],
'Host': 'wenshu.court.gov.cn',
'Origin': 'http://wenshu.court.gov.cn',
}
yield scrapy.FormRequest(url, formdata=data, callback=self.get_docid, headers=headers, dont_filter=True)
def get_docid(self, response):
'''计算出docid'''
html = response.text
result = eval(json.loads(html))
runeval = result[0]['RunEval']
content = result[1:]
for i in content:
casewenshuid = i.get('文书ID', '')
casejudgedate = i.get('裁判日期', '')
docid = self.js_2.call('getdocid', runeval, casewenshuid)
print('*************文书ID:' + docid)
url = 'http://wenshu.court.gov.cn/CreateContentJS/CreateContentJS.aspx?DocID={}'.format(docid)
yield scrapy.Request(url, callback=self.get_detail, meta={'casejudgedate':casejudgedate}, dont_filter=True)
def get_detail(self, response):
'''获取每条案件详情'''
html = response.text
content_1 = json.loads(re.search(r'JSON\.stringify\((.*?)\);\$\(document', html).group(1)) # 内容详情字典1
content_3 = re.search(r'"Html\\":\\"(.*?)\\"}"', html).group(1) # 内容详情字典3(doc文档正文)
reg = re.compile(r'<[^>]+>', re.S)
# 存储到item
item = WenshuCaseItem()
item['casecourt'] = {
'casecourtid': content_1.get('法院ID', ''),
'casecourtname': content_1.get('法院名称', ''),
'casecourtprovince': content_1.get('法院省份', ''),
'casecourtcity': content_1.get('法院地市', ''),
'casecourtdistrict': content_1.get('法院区县', ''),
'casecourtarea': content_1.get('法院区域', ''),
}
item['casecontent'] = {
'casebasecontent': content_1.get('案件基本情况段原文', ''),
'caseaddcontent': content_1.get('附加原文', ''),
'caseheadcontent': content_1.get('文本首部段落原文', ''),
'casemaincontent': content_1.get('裁判要旨段原文', ''),
'casecorrectionscontent': content_1.get('补正文书', ''),
'casedoccontent': content_1.get('DocContent', ''),
'caselitigationcontent': content_1.get('诉讼记录段原文', ''),
'casepartycontent': content_1.get('诉讼参与人信息部分原文', ''),
'casetailcontent': content_1.get('文本尾部原文', ''),
'caseresultcontent': content_1.get('判决结果段原文', ''),
'casestrcontent': reg.sub('', content_3), # 去除html标签后的文书内容
}
item['casetype'] = content_1.get('案件类型', '') # 案件类型
item['casejudgedate'] = response.meta['casejudgedate'] # 裁判日期
item['caseprocedure'] = content_1.get('审判程序', '')
item['casenumber'] = content_1.get('案号', '')
item['casenopublicreason'] = content_1.get('不公开理由', '')
item['casedocid'] = content_1.get('文书ID', '')
item['casename'] = content_1.get('案件名称', '')
item['casecontenttype'] = content_1.get('文书全文类型', '')
item['caseuploaddate'] = time.strftime("%Y-%m-%d",
time.localtime(int(content_1['上传日期'][6:-5]))) if 'Date' in content_1[
'上传日期'] else ''
item['casedoctype'] = content_1.get('案件名称').split('书')[0][-2:] if '书' in content_1.get(
'案件名称') else '令' # 案件文书类型:判决或者裁定...还有令
item['caseclosemethod'] = content_1.get('结案方式', '')
item['caseeffectivelevel'] = content_1.get('效力层级', '')
yield item
================================================
FILE: Wenshu_Project/__init__.py
================================================
# !/user/bin/env python
# -*- coding:utf-8 -*-
# time: 2018/10/19--22:09
__author__ = 'Henry'
================================================
FILE: Wenshu_Project/requirements.txt
================================================
pymongo==3.6.1
Scrapy==1.5.0
requests==2.20.0
PyExecJS==1.5.1
================================================
FILE: Wenshu_Project/scrapy.cfg
================================================
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = Wenshu.settings
[deploy]
#url = http://localhost:6800/
project = Wenshu