From 56f3b6e3766a0b5074fb36d5f803ec857a6a20a9 Mon Sep 17 00:00:00 2001
From: zwjamnsss <zwjamnsss@gmail.com>
Date: Fri, 11 Aug 2017 21:10:54 +0800
Subject: [PATCH 01/14] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E9=9B=86?=
 =?UTF-8?q?=E5=90=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Interface/InterfaceCol/InterfaceColContent.js | 15 +++++++++++----
 .../Interface/InterfaceCol/InterfaceColMenu.js    | 14 ++++++++++----
 client/containers/Project/Project.js              |  5 ++---
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js
index 1b92a5c6..b94829d2 100644
--- a/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js
+++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js
@@ -1,4 +1,11 @@
-import React from 'react'
-export default () => {
-  return <h1>hello colContent</h1>
-}
\ No newline at end of file
+import React, { Component } from 'react'
+
+export default class InterfaceColContent extends Component {
+  constructor(props) {
+    super(props)
+  }
+
+  render() {
+    return <h1>hello colContent</h1>
+  }
+}
diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
index 1b92a5c6..3b103640 100644
--- a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
+++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
@@ -1,4 +1,10 @@
-import React from 'react'
-export default () => {
-  return <h1>hello colContent</h1>
-}
\ No newline at end of file
+import React, { Component } from 'react'
+export default class InterfaceColMenu extends Component {
+  constructor(props) {
+    super(props)
+  }
+
+  render() {
+    return <h1>hello colContent</h1>
+  }
+}
diff --git a/client/containers/Project/Project.js b/client/containers/Project/Project.js
index 1dd5ded8..afd0962f 100644
--- a/client/containers/Project/Project.js
+++ b/client/containers/Project/Project.js
@@ -37,11 +37,10 @@ export default class Project extends Component {
 
   render () {
     const { match } = this.props;
-    console.log('project')
     return (
       <div>
         <Subnav
-          default={'接口'}
+          default={'动态'}
           data={[{
             name: '接口',
             path: `/project/${match.params.id}/interface`
@@ -53,7 +52,7 @@ export default class Project extends Component {
             path: `/project/${match.params.id}/activity`
           }]}/>
         <Switch>
-          <Redirect exact from ="/project/:id" to={`/project/${match.params.id}/activity`}/>
+          <Redirect exact from="/project/:id" to={`/project/${match.params.id}/activity`}/>
           <Route path="/project/:id/activity" component={Activity} />
           <Route path="/project/:id/interface" component={Interface} />
           <Route path="/project/:id/setting" component={Setting} />

From cad46617b80aa75dd23cb4bb39f671af034ee8b3 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 13:44:49 +0800
Subject: [PATCH 02/14] feat: add interface list and edit module

---
 client/containers/Login/Login.js              |   2 +-
 .../InterfaceList/AddInterfaceForm.js         |  96 +++++
 .../Project/Interface/InterfaceList/Edit.js   |  32 +-
 .../InterfaceList/InterfaceEditForm.js        | 334 ++++++++++++++++++
 .../Interface/InterfaceList/InterfaceMenu.js  | 150 +++++++-
 .../Project/Interface/InterfaceList/View.js   |  27 +-
 .../Interface/InterfaceList/mockEditor.js     | 135 +++++++
 .../Project/Interface/interface.scss          |  11 +-
 client/reducer/modules/interface.js           |  85 ++++-
 server/controllers/interface.js               |  42 +--
 server/models/interface.js                    |   7 +-
 static/dev.html                               |   4 +-
 12 files changed, 853 insertions(+), 72 deletions(-)
 create mode 100644 client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js
 create mode 100644 client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
 create mode 100644 client/containers/Project/Interface/InterfaceList/mockEditor.js

diff --git a/client/containers/Login/Login.js b/client/containers/Login/Login.js
index 312fc4d9..e208c350 100644
--- a/client/containers/Login/Login.js
+++ b/client/containers/Login/Login.js
@@ -54,7 +54,7 @@ class Login extends Component {
   }
 
   componentDidMount() {
-    window.QSSO.attach('qsso-login','/api/user/login_by_token')
+    if(window.QSSO) window.QSSO.attach('qsso-login','/api/user/login_by_token')
   }
 
 
diff --git a/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js b/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js
new file mode 100644
index 00000000..c2799977
--- /dev/null
+++ b/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js
@@ -0,0 +1,96 @@
+import React,{Component} from 'react'
+import PropTypes from 'prop-types'
+import { Form, Input, Select, Button } from 'antd';
+const FormItem = Form.Item;
+const Option = Select.Option;
+function hasErrors(fieldsError) {
+  return Object.keys(fieldsError).some(field => fieldsError[field]);
+}
+class AddInterfaceForm extends Component {
+  static propTypes = {
+    form: PropTypes.object,
+    onSubmit: PropTypes.func,
+    onCancel: PropTypes.func
+  }
+  handleSubmit = (e) => {
+    e.preventDefault();
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        this.props.onSubmit(values)
+      }
+    });
+  }
+
+  
+
+  render() {
+    const { getFieldDecorator, getFieldsError } = this.props.form;
+    const prefixSelector = getFieldDecorator('method', {
+      initialValue: 'GET'
+    })(
+      <Select style={{ width: 75 }}>
+        <Option value="GET">GET</Option>
+        <Option value="POST">POST</Option>
+        <Option value="PUT">PUT</Option>
+        <Option value="DELETE">DELETE</Option>
+      </Select>
+    );
+    const formItemLayout = {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 14 }
+      }
+    };
+    
+
+    return (
+      
+      <Form onSubmit={this.handleSubmit}>
+        <FormItem
+          {...formItemLayout}
+          label="接口名称"
+        >
+          {getFieldDecorator('title', {
+            rules: [{
+              required: true, message: '清输入接口名称!'
+            }]
+          })(
+            <Input placeholder="接口名称" />
+          )}
+        </FormItem>
+
+        <FormItem
+          {...formItemLayout}
+          label="接口路径"
+        >
+          {getFieldDecorator('path', {
+            rules: [{
+              required: true, message: '清输入接口路径!'
+            }]
+          })(
+            <Input addonBefore={prefixSelector} placeholder="/path" />
+          )}
+        </FormItem>
+        <br />
+        <FormItem wrapperCol={{ span: 24, offset: 8 }} >
+          <Button  onClick={this.props.onCancel} style={{marginRight: "10px"}}  >取消</Button>
+          <Button
+            type="primary"
+            htmlType="submit"
+            disabled={hasErrors(getFieldsError())}
+          >
+            提交
+          </Button>
+        </FormItem>
+          
+      </Form>
+
+    );
+  }
+}
+
+export default Form.create()(AddInterfaceForm);
diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js
index 79fbcc4d..c677b8bf 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.js
+++ b/client/containers/Project/Interface/InterfaceList/Edit.js
@@ -1,5 +1,29 @@
-import React from 'react'
+import React,{Component} from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux';
+import InterfaceEditForm from './InterfaceEditForm.js'
 
-export default () => {
-  return <h1>接口Edit</h1>
-}
\ No newline at end of file
+
+@connect(
+  state => {
+    return {
+      curdata: state.inter.curdata
+    }
+  }
+)
+
+class InterfaceEdit extends Component{
+  static propTypes = {
+    curdata: PropTypes.object
+  }
+
+  render(){
+    
+    return <div>
+      <h3>Edit</h3>
+      <InterfaceEditForm />
+    </div>
+  }
+}
+
+export default InterfaceEdit;
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
new file mode 100644
index 00000000..46819cb3
--- /dev/null
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
@@ -0,0 +1,334 @@
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+
+import {
+  Form, Select, Input,
+  Button, Row, Col, Radio, Icon
+} from 'antd';
+const FormItem = Form.Item;
+const Option = Select.Option;
+const RadioGroup = Radio.Group;
+const dataTpl = {
+  query: { name: "", required: "1", desc: "" },
+  req_headers: { name: "", required: "1", desc: "" }
+}
+
+const mockEditor = require('./mockEditor.js');
+
+
+class InterfaceEditForm extends Component {
+  static propTypes = {
+    form: PropTypes.object
+  }
+
+  constructor(props) {
+    super(props)
+    this.state = {
+      title: 'title',
+      path: 'path',
+      method: 'get',
+      query: [{
+        name: 'name',
+        desc: 'desc',
+        required: "1"
+      }],
+      req_body_type: 'form',
+      req_headers: [{
+        name: 'Content-Type',
+        value: 'application/urlencode', required: "1"
+      }],
+      req_body_form: [{
+        name: 'id',
+        type: 'text',
+        required: '1'
+      }]
+    }
+  }
+
+  handleSubmit = (e) => {
+    e.preventDefault();
+    this.props.form.validateFields((err, values) => {
+      if (!err) {
+        console.log('Received values of form: ', values);
+        console.log(this.props.form.getFieldValue('keys'))
+      }
+    });
+  }
+
+  componentDidMount() {
+    mockEditor({
+      container: 'req_body_json',
+      data: {
+        name: "@name"
+      },
+      onChange: function (d) {
+        console.log(this)
+        console.log(d)
+      }
+    })
+  }
+
+  addParams = (name) => {
+    let newValue = {}
+    newValue[name] = [].concat(this.state[name], dataTpl[name])
+    this.setState(newValue)
+  }
+
+  delParams = (key, name) => {
+
+    let curValue = this.props.form.getFieldValue(name);
+    let newValue = {}
+    newValue[name] = curValue.filter((val, index) => {
+      return index !== key;
+    })
+    this.props.form.setFieldsValue(newValue)
+    this.setState(newValue)
+  }
+
+  render() {
+    const { getFieldDecorator } = this.props.form;
+    const formItemLayout = {
+      labelCol: { span: 6 },
+      wrapperCol: { span: 14 }
+    };
+    const prefixSelector = getFieldDecorator('method', {
+      initialValue: 'GET'
+    })(
+      <Select style={{ width: 75 }}>
+        <Option value="GET">GET</Option>
+        <Option value="POST">POST</Option>
+        <Option value="PUT">PUT</Option>
+        <Option value="DELETE">DELETE</Option>
+      </Select>
+      );
+
+    const queryTpl = (data, index) => {
+      return <Row key={index}>
+        <Col span="4">
+          {getFieldDecorator('query[' + index + '].name', {
+            initialValue: data.name
+          })(
+            <Input placeholder="参数名称" />
+            )}
+        </Col>
+        <Col span="4" >
+          {getFieldDecorator('query[' + index + '].required', {
+            initialValue: data.required
+          })(
+            <Select>
+              <Option value="1">必需</Option>
+              <Option value="0">非必需</Option>
+            </Select>
+            )}
+        </Col>
+        <Col span="8" >
+          {getFieldDecorator('query[' + index + '].desc', {
+            initialValue: data.desc
+          })(
+            <Input placeholder="备注" />
+            )}
+        </Col>
+        <Col span="2" >
+          <Icon type="delete" onClick={() => this.delParams(index, 'query')} />
+        </Col>
+
+      </Row>
+    }
+
+    const headerTpl = (data, index) => {
+      return <Row key={index}>
+        <Col span="4">
+          {getFieldDecorator('req_headers[' + index + '].name', {
+            initialValue: data.name
+          })(
+            <Input placeholder="参数名称" />
+            )}
+        </Col>
+        <Col span="6" >
+          {getFieldDecorator('req_headers[' + index + '].value', {
+            initialValue: data.value
+          })(
+            <Input placeholder="参数值" />
+            )}
+        </Col>
+        <Col span="8" >
+          {getFieldDecorator('req_headers[' + index + '].desc', {
+            initialValue: data.desc
+          })(
+            <Input placeholder="备注" />
+            )}
+        </Col>
+        <Col span="2" >
+          <Icon type="delete" onClick={() => this.delParams(index, 'req_headers')} />
+        </Col>
+
+      </Row>
+    }
+
+    const requestBodyTpl = (data, index) => {
+      return <Row key={index}>
+        <Col span="8">
+          {getFieldDecorator('req_body_form[' + index + '].name')(
+            <Input placeholder="name" />
+          )}
+        </Col>
+        <Col span="4" >
+          {getFieldDecorator('req_body_form[' + index + '].type', {
+            initialValue: 'text'
+          })(
+            <Select>
+              <Option value="text">文本</Option>
+              <Option value="file">文件</Option>
+            </Select>
+            )}
+        </Col>
+        <Col span="8">
+          {getFieldDecorator('req_body_form[' + index + '].desc')(
+            <Input placeholder="备注" />
+          )}
+        </Col>
+        <Col span="2" >
+          <Icon type="delete" onClick={() => this.delParams(index, 'req_body_form')} />
+        </Col>
+      </Row>
+    }
+
+    const QueryList = this.state.query.map((item, index) => {
+      return queryTpl(item, index)
+    })
+
+    const headerList = this.state.req_headers.map((item, index) => {
+      return headerTpl(item, index)
+    })
+
+    const requestBodyList = this.state.req_body_form.map((item, index) => {
+      return requestBodyTpl(item, index)
+    })
+
+    return (
+      <Form onSubmit={this.handleSubmit}>
+        <FormItem
+          {...formItemLayout}
+          label="接口名称"
+        >
+          {getFieldDecorator('title', {
+            rules: [{
+              required: true, message: '清输入接口名称!'
+            }]
+          })(
+            <Input placeholder="接口名称" />
+            )}
+        </FormItem>
+
+        <FormItem
+          {...formItemLayout}
+          label="接口路径"
+        >
+          {getFieldDecorator('path', {
+            rules: [{
+              required: true, message: '清输入接口路径!'
+            }]
+          })(
+            <Input addonBefore={prefixSelector} placeholder="/path" />
+            )}
+        </FormItem>
+
+        <FormItem
+          {...formItemLayout}
+          label="状态"
+        >
+          {getFieldDecorator('status', { initialValue: 'undone' })(
+            <Select>
+              <Option value="done">已完成</Option>
+              <Option value="undone">未完成</Option>
+            </Select>
+          )}
+        </FormItem>
+
+        <FormItem
+          {...formItemLayout}
+          label="接口描述"
+        >
+          {getFieldDecorator('desc')(
+            <Input.TextArea placeholder="接口描述" />
+          )}
+        </FormItem>
+
+        <FormItem
+          {...formItemLayout}
+          label="Query"
+        >
+          <Button onClick={() => this.addParams('query')}>添加Query参数</Button>
+        </FormItem>
+
+        <Row>
+          <Col span={18} offset={6}>
+            {QueryList}
+          </Col>
+
+        </Row>
+
+
+        <FormItem
+          {...formItemLayout}
+          label="请求Headers"
+        >
+          <Button onClick={() => this.addParams('req_headers')}>添加Header</Button>
+        </FormItem>
+
+        <Row>
+          <Col span={18} offset={6}>
+            {headerList}
+          </Col>
+
+        </Row>
+
+        <FormItem style={{ marginBottom: "5px" }}
+          {...formItemLayout}
+          label="请求Body"
+        >
+          {getFieldDecorator('req_body_type', {
+            initialValue: this.state.req_body_type
+          })(
+            <RadioGroup>
+              <Radio value="form">form</Radio>
+              <Radio value="json">json</Radio>
+              <Radio value="file">file</Radio>
+            </RadioGroup>
+            )}
+
+        </FormItem>
+
+        <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'form' ? 'block' : 'none' }}>
+          <Col span={14} offset={6} style={{ minHeight: "300px", padding: "15px" }}>
+            <Row>
+              <Col span="24">
+
+                <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button>
+
+              </Col>
+
+            </Row>
+            {requestBodyList}
+          </Col>
+
+        </Row>
+
+        <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}>
+          <Col span={14} offset={6} id="req_body_json"  style={{ minHeight: "300px", padding: "15px" }}>
+            
+          </Col>
+
+
+        </Row>
+        <FormItem
+          wrapperCol={{ span: 12, offset: 6 }}
+        >
+          <Button type="primary" htmlType="submit">Submit</Button>
+        </FormItem>
+      </Form>
+    );
+  }
+}
+
+export default Form.create()(InterfaceEditForm);
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js b/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js
index 911ef4a2..d1926bee 100644
--- a/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js
@@ -1,54 +1,174 @@
 import React, { Component } from 'react'
 import { connect } from 'react-redux';
 import PropTypes from 'prop-types'
-import { fetchInterfaceList } from  '../../../../reducer/modules/interface.js';
-import { Menu, Button, Input, Icon, Tag } from 'antd';
+import { fetchInterfaceList, fetchInterfaceData, changeInterfaceId, addInterfaceData, deleteInterfaceData } from '../../../../reducer/modules/interface.js';
+import { Menu, Input, Icon, Tag, Modal, message } from 'antd';
+import AddInterfaceForm from './AddInterfaceForm';
+import axios from 'axios'
+
+const confirm = Modal.confirm;
+
+
 
 @connect(
   state => {
     return {
       list: state.inter.list,
-      curProject: state.project.curProject
+      curProject: state.project.curProject,
+      interfaceId: state.inter.interfaceId
     }
   },
   {
-    fetchInterfaceList
+    fetchInterfaceList,
+    fetchInterfaceData,
+    changeInterfaceId,
+    addInterfaceData,
+    deleteInterfaceData
   }
 )
 class InterfaceMenu extends Component {
   static propTypes = {
     projectId: PropTypes.string,
+    interfaceId: PropTypes.number,
     list: PropTypes.array,
     fetchInterfaceList: PropTypes.func,
-    curProject: PropTypes.object
-  } 
+    curProject: PropTypes.object,
+    fetchInterfaceData: PropTypes.func,
+    changeInterfaceId: PropTypes.func,
+    addInterfaceData: PropTypes.func,
+    deleteInterfaceData: PropTypes.func
+  }
+
+  showModal = () => {
+    this.setState({
+      visible: true
+    });
+  }
+
+  handleCancel = () => {
+    this.setState({
+      visible: false
+    });
+  }
 
   constructor(props) {
     super(props)
+    this.state = {
+      curKey: null,
+      visible: false,
+      delIcon: null,
+      filter: ''
+    }
   }
 
-  componentWillMount(){
-    this.props.fetchInterfaceList(this.props.projectId)
+  async handleRequest() {
+    let result = await this.props.fetchInterfaceList(this.props.projectId);
+    let interfaces = result.payload.data;
+    if (interfaces.length > 0) {
+      this.props.changeInterfaceId(interfaces[0]._id)
+      await this.props.fetchInterfaceData(interfaces[0]._id)
+    }
+  }
+
+  componentWillMount() {
+    this.handleRequest()
+  }
+
+  onSelect = (item) => {
+    this.props.changeInterfaceId(parseInt(item.key, 10))
+    this.props.fetchInterfaceData(parseInt(item.key, 10))
+  }
+
+  handleAddInterface = (data) => {
+    data.project_id = this.props.projectId;
+    axios.post('/api/interface/add', data).then((res) => {
+      if (res.data.errcode !== 0) {
+        return message.error(res.data.errmsg);
+      }
+      message.success('接口添加成功')
+      this.props.addInterfaceData(res.data.data)
+      this.setState({
+        visible: false
+      });
+
+    })
+  }
+
+  showConfirm = (id)=> {
+    let that = this;
+    confirm({
+      title: '您确认删除此接口',
+      content: '温馨提示:接口删除后,无法恢复',
+      onOk() {
+        that.props.deleteInterfaceData(id)
+      },
+      onCancel() { }
+    });
+  }
+
+  delInterface = (id) => {
+
+    this.props.deleteInterfaceData(id)
+  }
+
+  enterItem = (e) => {
+    this.setState({ delIcon: e.key })
+  }
+
+  leaveItem = () => {
+    this.setState({ delIcon: null })
+  }
+
+  onFilter = (e) => {
+    this.setState({
+      filter: e.target.value
+    })
   }
 
   render() {
     const items = [];
-    this.props.list.forEach((item, index)=> {
+    this.props.list.forEach((item) => {
+      let color, filter = this.state.filter;
+      if(filter && item.title.indexOf(filter) === -1 && item.path.indexOf(filter) === -1){
+        return null;
+      }
+      switch (item.method) {
+        case 'GET': color = "green"; break;
+        case 'POST': color = "blue"; break;
+        case 'PUT': color = "yellow"; break;
+        case 'DELETE': color = 'red'; break;
+        default: color = "green";
+      }
+
       items.push(
-        <Menu.Item key={index}><Button className="btn-http" type="primary">{item.method}  </Button>{item.title}</Menu.Item>
+        <Menu.Item onMouseEnter={this.enterItem} onMouseLeave={this.leaveItem} key={"" + item._id}>
+          <Tag className="btn-http" color={color}>{item.method}  </Tag>
+          {item.title}
+          <Icon type="delete" onClick={()=> {this.showConfirm(item._id)}} style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }} className="interface-delete-icon" />
+        </Menu.Item>
       )
-    } )
+    })
+
     return <div>
       <div className="interface-filter">
-        <Input placeholder="Filter by name" style={{ width: "70%" }} />
-        <Tag color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" /></Tag>
+        <Input onChange={this.onFilter} value={this.state.filter} placeholder="Filter by name" style={{ width: "70%" }} />
+        <Tag onClick={this.showModal} color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" /></Tag>
+        <Modal
+          title="添加接口"
+          visible={this.state.visible}
+          onOk={this.handleOk}
+          onCancel={this.handleCancel}
+          footer={null}
+        >
+          <AddInterfaceForm onCancel={this.handleCancel} onSubmit={this.handleAddInterface} />
+        </Modal>
       </div>
-      <Menu className="interface-list">
+      <Menu selectedKeys={[this.props.interfaceId + ""]} className="interface-list" onSelect={this.onSelect}>
         {items}
       </Menu>
     </div>
 
   }
-} 
+}
 
 export default InterfaceMenu
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/View.js b/client/containers/Project/Interface/InterfaceList/View.js
index 4fe8a1eb..8aecbd92 100644
--- a/client/containers/Project/Interface/InterfaceList/View.js
+++ b/client/containers/Project/Interface/InterfaceList/View.js
@@ -1,6 +1,27 @@
-import React from 'react'
+import React,{Component} from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux';
 
-export default () => {
-  return <h1>接口预览</h1>
+@connect(
+  state => {
+    return {
+      curdata: state.inter.curdata
+    }
+  }
+)
+
+class InterfaceView extends Component{
+  static propTypes = {
+    curdata: PropTypes.object
+  }
+
+  render(){
+    console.log(this.props.curdata)
+    let view = JSON.stringify(this.props.curdata, null, "   ");
+    return <pre>
+      {view}
+    </pre>
+  }
 }
 
+export default InterfaceView;
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js
new file mode 100644
index 00000000..fd0bc4b9
--- /dev/null
+++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js
@@ -0,0 +1,135 @@
+var ace = require('brace'),
+  Mock = require('mockjs')
+require('brace/mode/json');
+require('brace/theme/xcode');
+require("brace/ext/language_tools.js");
+require("brace/snippets/json.js")
+
+var langTools = ace.acequire("ace/ext/language_tools"),
+  editor,
+  mockEditor,
+  rhymeCompleter,
+  wordList = [
+    { name: '字符串', mock: '@string' },
+    { name: '自然数', mock: '@natural' },
+    { name: '浮点数', mock: '@float' },
+    { name: '字符', mock: '@character' },
+    { name: '布尔', mock: '@boolean' },
+    { name: 'url', mock: '@url' },
+    { name: '域名', mock: '@domain' },
+    { name: 'ip地址', mock: '@ip' },
+    { name: 'id', mock: '@id' },
+    { name: 'guid', mock: '@guid' },
+    { name: '当前时间', mock: '@now' },
+    { name: '日期', mock: '@date' },
+    { name: '时间', mock: '@time' },
+    { name: '日期时间', mock: '@datetime' },
+    { name: '图片连接', mock: '@image' },
+    { name: '图片data', mock: "@imageData" },
+    { name: '颜色', mock: '@color' },
+    { name: '颜色hex', mock: '@hex' },
+    { name: '颜色rgba', mock: '@rgba' },
+    { name: '颜色rgb', mock: '@rgb' },
+    { name: '颜色hsl', mock: '@hsl' },
+    { name: '整数', mock: '@integer' },
+    { name: '浮点数', mock: '@float' },
+    { name: 'email', mock: '@email' },
+    { name: '大段文本', mock: '@paragraph' },
+    { name: '句子', mock: '@sentence' },
+    { name: '单词', mock: '@word' },
+    { name: '大段中文文本', mock: '@cparagraph' },
+    { name: '中文标题', mock: '@ctitle' },
+    { name: '标题', mock: '@title' },
+    { name: '姓名', mock: '@name' },
+    { name: '中文姓名', mock: '@cname' },
+    { name: '中文姓', mock: '@cfirst' },
+    { name: '中文名', mock: '@clast' },
+    { name: '英文姓', mock: '@first' },
+    { name: '英文名', mock: '@last' },
+    { name: '中文句子', mock: '@csentence' },
+    { name: '中文词组', mock: '@cword' },
+    { name: '地址', mock: '@region' },
+    { name: '省份', mock: '@province' },
+    { name: '城市', mock: '@city' },
+    { name: '地区', mock: '@county' },
+    { name: '转换为大写', mock: '@upper' },
+    { name: '转换为小写', mock: '@lower' },
+    { name: '挑选(枚举)', mock: '@pick' },
+    { name: '打乱数组', mock: '@shuffle' },
+    { name: '协议', mock: '@protocol' }
+  ];
+
+function run(options) {
+  options = options || {};
+  var container, data;
+  container = options.container || 'mock-editor';
+  if (options.wordList && typeof options.wordList === 'object' && options.wordList.name && options.wordList.mock) {
+    wordList.push(options.wordList);
+  }
+  data = options.data || '';
+
+  editor = ace.edit(container)
+  editor.$blockScrolling = Infinity;
+  editor.getSession().setMode('ace/mode/json');
+  editor.setTheme('ace/theme/xcode');
+  editor.setOptions({
+    enableBasicAutocompletion: true,
+    enableSnippets: true,
+    enableLiveAutocompletion: true
+  });
+  mockEditor = {
+    curData: {},
+    getValue: editor.getValue,
+    setValue: function (data) {
+      data = data || '';
+      if (typeof data === 'string') {
+        editor.setValue(data);
+      } else if (typeof data === 'object') {
+        editor.setValue(JSON.stringify(data, null, "  "))
+      }
+    },
+    editor: editor
+  }
+  rhymeCompleter = {
+    identifierRegexps: [/[@]/],
+    getCompletions: function (editor, session, pos, prefix, callback) {
+      if (prefix.length === 0) { callback(null, []); return }
+      callback(null, wordList.map(function (ea) {
+        return { name: ea.mock, value: ea.mock, score: ea.mock, meta: ea.name }
+      }));
+    }
+  }
+
+  langTools.addCompleter(rhymeCompleter);
+  mockEditor.setValue(data);
+  handleJson(editor.getValue())
+
+  editor.clearSelection();
+
+  editor.getSession().on('change', () => {
+    handleJson(editor.getValue())
+    if (typeof options.onChange === 'function') {
+      options.onChange.call(mockEditor, mockEditor.curData);
+    }
+
+  });
+
+  return mockEditor;
+}
+
+
+
+function handleJson(json) {
+  var curData = mockEditor.curData;
+  try {
+    var obj = JSON.parse(json);
+    curData.format = true;
+    curData.jsonData = obj;
+    curData.mockData = Mock.mock(obj);
+  } catch (e) {
+    curData.format = e.message;
+  }
+}
+
+
+module.exports = run;
\ No newline at end of file
diff --git a/client/containers/Project/Interface/interface.scss b/client/containers/Project/Interface/interface.scss
index c2accb43..5460e7bd 100644
--- a/client/containers/Project/Interface/interface.scss
+++ b/client/containers/Project/Interface/interface.scss
@@ -3,7 +3,7 @@
         min-height: 5rem;
         box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20);
         background: #FFF;
-        border-radius:4px;
+        border-radius:5px;
         margin: 3px;
         .ant-tabs-bar{
             border-bottom: none;
@@ -41,9 +41,10 @@
                 width: 40px;
             }
 
-            .btn-http-get{
-                background-color: #00a854;
-                border-color: #00a854
+            .interface-delete-icon{
+                position: absolute;
+                right: 5px;
+                top: 14px;
             }
         }
     }
@@ -53,7 +54,7 @@
         min-height: 5rem;
         box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20);
         background: #FFF;
-        border-radius:4px;
+        border-radius:5px;
         .interface-content{
             .ant-tabs-nav{
                 width:100%
diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js
index 323d7df3..4dd3c3d7 100644
--- a/client/reducer/modules/interface.js
+++ b/client/reducer/modules/interface.js
@@ -2,19 +2,54 @@ import axios from 'axios'
 // Actions
 const FETCH_INTERFACE_DATA = 'yapi/interface/FETCH_INTERFACE_DATA';
 const FETCH_INTERFACE_LIST = 'yapi/interface/FETCH_INTERFACE_LIST';
-
-// const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA';
+const CHANGE_INTERFACE_ID = 'yapi/interface/CHANGE_INTERFACE_ID';
+const ADD_INTERFACE_DATA = 'yapi/interface/ADD_INTERFACE_DATA';
+const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA';
 // const SAVE_INTERFACE_PROJECT_ID = 'yapi/interface/SAVE_INTERFACE_PROJECT_ID';
 // const GET_INTERFACE_GROUP_LIST = 'yapi/interface/GET_INTERFACE_GROUP_LIST';
 
 // Reducer
 const initialState = {
+  interfaceId: 0,
   curdata: {},
   list: []
 }
 
 export default (state = initialState, action) => {
   switch (action.type) {
+    case DELETE_INTERFACE_DATA:
+      return (() => {
+        
+        let newlist = state.list.filter(data=> data._id !== action.payload), newid, curdata;
+        
+        if (state.interfaceId === action.payload && state.list.length > 0) {
+          newid = state.list[0]._id
+          curdata = state.list[0]
+        } else if (state.list.length == 0) {
+          newid = 0;
+          curdata = {}
+        }
+
+        return {
+          ...state,
+          curdata: curdata,
+          interfaceId: newid,
+          list: newlist
+        }
+      })()
+
+    case ADD_INTERFACE_DATA:
+      return {
+        ...state,
+        curdata: action.payload,
+        list: [].concat(state.list, action.payload),
+        interfaceId: action.payload._id
+      }
+    case CHANGE_INTERFACE_ID:
+      return {
+        ...state,
+        interfaceId: action.payload
+      }
     case FETCH_INTERFACE_DATA:
       return {
         ...state,
@@ -24,31 +59,47 @@ export default (state = initialState, action) => {
       return {
         ...state,
         list: action.payload.data
-      } 
+      }
     default:
       return state
   }
 }
 
+export function changeInterfaceId(id) {
+  return {
+    type: CHANGE_INTERFACE_ID,
+    payload: id
+  }
+}
+
+export async function deleteInterfaceData(id) {
+  await axios.post('/api/interface/del', { id: id })
+  return {
+    type: DELETE_INTERFACE_DATA,
+    payload: id
+  }
+}
 
 // Action Creators
-export function fetchInterfaceData (interfaceId) {
-  return async (dispatch) => {    
-    let result = await axios.get('/api/interface/get?id=' + interfaceId);
-    dispatch({
-      type: FETCH_INTERFACE_DATA,
-      payload: result.data 
-    })
+export async function fetchInterfaceData(interfaceId) {
+  let result = await axios.get('/api/interface/get?id=' + interfaceId);
+  return {
+    type: FETCH_INTERFACE_DATA,
+    payload: result.data
   }
 }
 
-export function fetchInterfaceList(projectId){
-  return async (dispatch) => {    
-    let result = await axios.get('/api/interface/list?project_id=' + projectId);
-    dispatch({
-      type: FETCH_INTERFACE_LIST,
-      payload: result.data 
-    })
+export async function fetchInterfaceList(projectId) {
+  let result = await axios.get('/api/interface/list?project_id=' + projectId);
+  return {
+    type: FETCH_INTERFACE_LIST,
+    payload: result.data
   }
 }
 
+export async function addInterfaceData(data) {
+  return {
+    type: ADD_INTERFACE_DATA,
+    payload: data
+  }
+}
\ No newline at end of file
diff --git a/server/controllers/interface.js b/server/controllers/interface.js
index 642b0cb1..f70a1066 100644
--- a/server/controllers/interface.js
+++ b/server/controllers/interface.js
@@ -23,12 +23,12 @@ class interfaceController extends baseController {
      * @param {String}  [req_headers[].value] 请求的header信息值
      * @param {Boolean}  [req_headers[].required] 是否是必须,默认为否
      * @param {String}  [req_headers[].desc] header描述
-     * @param {String}  [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种
-     * @param {Mixed}  [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
-     * @param {String} [req_params_form[].name] 请求参数名
-     * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
-     * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种
-     * @param {String} [req_params_other]  非form类型的请求参数可保存到此字段
+     * @param {String}  [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种
+     * @param {Mixed}  [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
+     * @param {String} [req_body_form[].name] 请求参数名
+     * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
+     * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种
+     * @param {String} [req_body_other]  非form类型的请求参数可保存到此字段
      * @param {String}  [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种
      * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能
      * @param  {String} [desc] 接口描述 
@@ -75,7 +75,7 @@ class interfaceController extends baseController {
                 desc: params.desc,
                 method: params.method,
                 req_headers: params.req_headers,
-                req_params_type: params.req_params_type,
+                req_body_type: params.req_body_type,
                 res_body: params.res_body,
                 res_body_type: params.res_body_type,
                 uid: this.getUid(),
@@ -83,11 +83,11 @@ class interfaceController extends baseController {
                 up_time: yapi.commons.time()
             };
 
-            if (params.req_params_form) {
-                data.req_params_form = params.req_params_form;
+            if (params.req_body_form) {
+                data.req_body_form = params.req_body_form;
             }
-            if (params.req_params_other) {
-                data.req_params_other = params.req_params_other;
+            if (params.req_body_other) {
+                data.req_body_other = params.req_body_other;
             }
 
             let result = await this.Model.save(data);
@@ -161,12 +161,12 @@ class interfaceController extends baseController {
      * @param {String}  [req_headers[].value] 请求的header信息值
      * @param {Boolean}  [req_headers[].required] 是否是必须,默认为否
      * @param {String}  [req_headers[].desc] header描述
-     * @param {String}  [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种
-     * @param {Mixed}  [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
-     * @param {String} [req_params_form[].name] 请求参数名
-     * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
-     * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种
-     * @param {String} [req_params_other]  非form类型的请求参数可保存到此字段
+     * @param {String}  [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种
+     * @param {Mixed}  [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
+     * @param {String} [req_body_form[].name] 请求参数名
+     * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
+     * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种
+     * @param {String} [req_body_other]  非form类型的请求参数可保存到此字段
      * @param {String}  [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种
      * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能
      * @param  {String} [desc] 接口描述 
@@ -225,11 +225,11 @@ class interfaceController extends baseController {
             data.req_headers = params.req_headers;
         }
 
-        if (params.req_params_form) {
-            data.req_params_form = params.req_params_form;
+        if (params.req_body_form) {
+            data.req_body_form = params.req_body_form;
         }
-        if (params.req_params_other) {
-            data.req_params_other = params.req_params_other;
+        if (params.req_body_other) {
+            data.req_body_other = params.req_body_other;
         }
 
         if (params.res_body_type) {
diff --git a/server/models/interface.js b/server/models/interface.js
index a5a4f6e7..85944e55 100644
--- a/server/models/interface.js
+++ b/server/models/interface.js
@@ -13,6 +13,7 @@ class interfaceModel extends baseModel {
             path: { type: String, required: true },
             method: { type: String, required: true },
             project_id: { type: Number, required: true },
+            status: {type: String, enum: ['undone', 'done'], default: 'undone'},
             desc: String,
             add_time: Number,
             up_time: Number,
@@ -22,14 +23,14 @@ class interfaceModel extends baseModel {
             req_headers: [{
                 name: String, value: String, desc: String, required: Boolean
             }],
-            req_params_type: {
+            req_body_type: {
                 type: String,
                 enum: ['form', 'json', 'text', 'xml']
             },
-            req_params_form: [{
+            req_body_form: [{
                 name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean
             }],
-            req_params_other: String,
+            req_body_other: String,
             res_body_type: {
                 type: String,
                 enum: ['json', 'text', 'xml']
diff --git a/static/dev.html b/static/dev.html
index 39413bb5..ad5fe2e7 100644
--- a/static/dev.html
+++ b/static/dev.html
@@ -9,8 +9,6 @@
 <body>
 <div id="yapi" style="height: 100%;"></div>
 
-
-
 <script src="http://127.0.0.1:4000/prd/manifest@dev.js"></script>
 <script src="http://127.0.0.1:4000/prd/lib2@dev.js"></script>
 <script src="http://127.0.0.1:4000/prd/lib@dev.js"></script>
@@ -20,7 +18,7 @@
 <script src="/lib/snippets-json.js"></script>
 <script src="/lib/ext-language.tools.js"></script>
 <script src="/lib/mode-json-1.2.8.js"></script>
-<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script>
+<!-- <script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> -->
 
 
 

From 01ea9897fe256a5b11d97730d2727aef61186c2c Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 15:06:32 +0800
Subject: [PATCH 03/14] fix: fix add project member bug

---
 server/models/interface.js           | 18 ++++++++++--
 server/models/project.js             |  4 +--
 server_dist/controllers/interface.js | 42 ++++++++++++++--------------
 server_dist/models/interface.js      | 25 +++++++++++++----
 server_dist/models/project.js        |  4 +--
 5 files changed, 59 insertions(+), 34 deletions(-)

diff --git a/server/models/interface.js b/server/models/interface.js
index 85944e55..174cfb9f 100644
--- a/server/models/interface.js
+++ b/server/models/interface.js
@@ -18,17 +18,29 @@ class interfaceModel extends baseModel {
             add_time: Number,
             up_time: Number,
             req_query:[{
-                name: String, value: String, desc: String, required: Boolean
+                name: String, value: String, desc: String, required: {
+                    type:String,
+                    enum: ["1", "0"],
+                    default: "1"
+                }
             }],
             req_headers: [{
-                name: String, value: String, desc: String, required: Boolean
+                name: String, value: String, desc: String, required: {
+                    type:String,
+                    enum: ["1", "0"],
+                    default: "1"
+                }
             }],
             req_body_type: {
                 type: String,
                 enum: ['form', 'json', 'text', 'xml']
             },
             req_body_form: [{
-                name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean
+                name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
+                    type:String,
+                    enum: ["1", "0"],
+                    default: "1"
+                }
             }],
             req_body_other: String,
             res_body_type: {
diff --git a/server/models/project.js b/server/models/project.js
index d55a9c41..ea3676d9 100644
--- a/server/models/project.js
+++ b/server/models/project.js
@@ -15,7 +15,7 @@ class projectModel extends baseModel {
             group_id: { type: Number, required: true },
             project_type: {type:String, required: true, enum: ['public', 'private']},
             members: [
-                {uid: Number, role: {type: String, enum:['owner', 'dev'], username: String, email: String}}
+                {uid: Number, role: {type: String, enum:['owner', 'dev']},username: String, email: String}
             ],
             protocol: { type: String, required: true },
             prd_host: { type: String, required: true },
@@ -111,7 +111,7 @@ class projectModel extends baseModel {
             {
                 _id: id
             }, {
-                $pull: { members: uid }
+                $pull: { members: {uid: uid} }
             }
         );
     }
diff --git a/server_dist/controllers/interface.js b/server_dist/controllers/interface.js
index 1a6941c4..98c826cb 100644
--- a/server_dist/controllers/interface.js
+++ b/server_dist/controllers/interface.js
@@ -69,12 +69,12 @@ var interfaceController = function (_baseController) {
      * @param {String}  [req_headers[].value] 请求的header信息值
      * @param {Boolean}  [req_headers[].required] 是否是必须,默认为否
      * @param {String}  [req_headers[].desc] header描述
-     * @param {String}  [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种
-     * @param {Mixed}  [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
-     * @param {String} [req_params_form[].name] 请求参数名
-     * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
-     * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种
-     * @param {String} [req_params_other]  非form类型的请求参数可保存到此字段
+     * @param {String}  [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种
+     * @param {Mixed}  [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
+     * @param {String} [req_body_form[].name] 请求参数名
+     * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
+     * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种
+     * @param {String} [req_body_other]  非form类型的请求参数可保存到此字段
      * @param {String}  [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种
      * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能
      * @param  {String} [desc] 接口描述 
@@ -152,7 +152,7 @@ var interfaceController = function (_baseController) {
                                     desc: params.desc,
                                     method: params.method,
                                     req_headers: params.req_headers,
-                                    req_params_type: params.req_params_type,
+                                    req_body_type: params.req_body_type,
                                     res_body: params.res_body,
                                     res_body_type: params.res_body_type,
                                     uid: this.getUid(),
@@ -161,11 +161,11 @@ var interfaceController = function (_baseController) {
                                 };
 
 
-                                if (params.req_params_form) {
-                                    data.req_params_form = params.req_params_form;
+                                if (params.req_body_form) {
+                                    data.req_body_form = params.req_body_form;
                                 }
-                                if (params.req_params_other) {
-                                    data.req_params_other = params.req_params_other;
+                                if (params.req_body_other) {
+                                    data.req_body_other = params.req_body_other;
                                 }
 
                                 _context.next = 22;
@@ -337,12 +337,12 @@ var interfaceController = function (_baseController) {
          * @param {String}  [req_headers[].value] 请求的header信息值
          * @param {Boolean}  [req_headers[].required] 是否是必须,默认为否
          * @param {String}  [req_headers[].desc] header描述
-         * @param {String}  [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种
-         * @param {Mixed}  [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
-         * @param {String} [req_params_form[].name] 请求参数名
-         * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
-         * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种
-         * @param {String} [req_params_other]  非form类型的请求参数可保存到此字段
+         * @param {String}  [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种
+         * @param {Mixed}  [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串
+         * @param {String} [req_body_form[].name] 请求参数名
+         * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email
+         * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种
+         * @param {String} [req_body_other]  非form类型的请求参数可保存到此字段
          * @param {String}  [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种
          * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能
          * @param  {String} [desc] 接口描述 
@@ -436,11 +436,11 @@ var interfaceController = function (_baseController) {
                                     data.req_headers = params.req_headers;
                                 }
 
-                                if (params.req_params_form) {
-                                    data.req_params_form = params.req_params_form;
+                                if (params.req_body_form) {
+                                    data.req_body_form = params.req_body_form;
                                 }
-                                if (params.req_params_other) {
-                                    data.req_params_other = params.req_params_other;
+                                if (params.req_body_other) {
+                                    data.req_body_other = params.req_body_other;
                                 }
 
                                 if (params.res_body_type) {
diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js
index d51903dd..44434ca6 100644
--- a/server_dist/models/interface.js
+++ b/server_dist/models/interface.js
@@ -52,23 +52,36 @@ var interfaceModel = function (_baseModel) {
                 path: { type: String, required: true },
                 method: { type: String, required: true },
                 project_id: { type: Number, required: true },
+                status: { type: String, enum: ['undone', 'done'], default: 'undone' },
                 desc: String,
                 add_time: Number,
                 up_time: Number,
                 req_query: [{
-                    name: String, value: String, desc: String, required: Boolean
+                    name: String, value: String, desc: String, required: {
+                        type: String,
+                        enum: ["1", "0"],
+                        default: "1"
+                    }
                 }],
                 req_headers: [{
-                    name: String, value: String, desc: String, required: Boolean
+                    name: String, value: String, desc: String, required: {
+                        type: String,
+                        enum: ["1", "0"],
+                        default: "1"
+                    }
                 }],
-                req_params_type: {
+                req_body_type: {
                     type: String,
                     enum: ['form', 'json', 'text', 'xml']
                 },
-                req_params_form: [{
-                    name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean
+                req_body_form: [{
+                    name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
+                        type: String,
+                        enum: ["1", "0"],
+                        default: "1"
+                    }
                 }],
-                req_params_other: String,
+                req_body_other: String,
                 res_body_type: {
                     type: String,
                     enum: ['json', 'text', 'xml']
diff --git a/server_dist/models/project.js b/server_dist/models/project.js
index b9b4988d..39c8b360 100644
--- a/server_dist/models/project.js
+++ b/server_dist/models/project.js
@@ -53,7 +53,7 @@ var projectModel = function (_baseModel) {
                 desc: String,
                 group_id: { type: Number, required: true },
                 project_type: { type: String, required: true, enum: ['public', 'private'] },
-                members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'], username: String, email: String } }],
+                members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'] }, username: String, email: String }],
                 protocol: { type: String, required: true },
                 prd_host: { type: String, required: true },
                 env: [{ name: String, domain: String }],
@@ -156,7 +156,7 @@ var projectModel = function (_baseModel) {
             return this.model.update({
                 _id: id
             }, {
-                $pull: { members: uid }
+                $pull: { members: { uid: uid } }
             });
         }
     }, {

From 6ff320aecca7d502520aeb828956cb7f2bb48bef Mon Sep 17 00:00:00 2001
From: "wenbo.dong" <wenbo.dong@qunar.com>
Date: Mon, 14 Aug 2017 15:41:58 +0800
Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=E6=88=91=E7=9A=84=E5=85=B3?=
 =?UTF-8?q?=E6=B3=A8=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 client/components/ProjectCard/ProjectCard.js  |  6 +-
 client/containers/Follows/Follows.js          | 55 ++++++++++--
 client/containers/Follows/Follows.scss        |  9 +-
 .../containers/Group/MemberList/MemberList.js |  3 +-
 .../Group/ProjectList/ProjectList.js          | 22 ++---
 client/reducer/modules/follow.js              | 34 ++++++++
 client/reducer/modules/reducer.js             |  4 +-
 server/controllers/project.js                 |  1 +
 server_dist/controllers/project.js            |  1 +
 static/doc/api.html                           | 86 +++++++++----------
 static/doc/index.html                         |  6 +-
 static/doc/interface.html                     | 14 +--
 static/doc/mock.html                          | 24 +++---
 static/doc/source/app.js                      | 16 +++-
 static/doc/source/code.css                    |  2 +-
 static/doc/source/main.css                    |  2 +-
 static/doc/source/main.js                     | 12 +--
 .../static/server/controllers/base.js.html    |  3 +
 .../static/server/controllers/follow.js.html  | 14 ++-
 .../doc/static/server/controllers/log.js.html | 14 +--
 .../static/server/controllers/project.js.html | 57 ++++++++++++
 21 files changed, 267 insertions(+), 118 deletions(-)
 create mode 100644 client/reducer/modules/follow.js

diff --git a/client/components/ProjectCard/ProjectCard.js b/client/components/ProjectCard/ProjectCard.js
index 1c16ca55..d5dc9aa6 100644
--- a/client/components/ProjectCard/ProjectCard.js
+++ b/client/components/ProjectCard/ProjectCard.js
@@ -7,9 +7,6 @@ import PropTypes from 'prop-types';
 class ProjectCard extends Component {
   constructor(props) {
     super(props);
-    this.state = {
-
-    };
   }
 
   static propTypes = {
@@ -18,13 +15,12 @@ class ProjectCard extends Component {
 
   render() {
     const { projectData } = this.props;
-    console.log(projectData);
     return (
       <Link to={`/project/${projectData._id}`}>
         <Card bordered={false} bodyStyle={{padding: 16}} className="m-card">
           <div className="m-card-logo">
             <Icon type="area-chart" className="icon" />
-            <p className="name">{projectData.name}</p>
+            <p className="name">{projectData.name || projectData.projectname}</p>
           </div>
           <div className="m-card-btns" style={{display: 'none'}}>btns</div>
         </Card>
diff --git a/client/containers/Follows/Follows.js b/client/containers/Follows/Follows.js
index d5a2c60a..00830127 100644
--- a/client/containers/Follows/Follows.js
+++ b/client/containers/Follows/Follows.js
@@ -1,10 +1,48 @@
 import React, { Component } from 'react';
 import './Follows.scss';
+import PropTypes from 'prop-types';
+import { connect } from 'react-redux';
+import { Row, Col } from 'antd';
+import { getFollowList } from  '../../reducer/modules/follow';
 import Subnav from '../../components/Subnav/Subnav.js';
 import ProjectCard from '../../components/ProjectCard/ProjectCard.js';
 
+
+@connect(
+  state => {
+    return {
+      data: state.follow.data
+    }
+  },
+  {
+    getFollowList
+  }
+)
 class Follows extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      data: []
+    }
+  }
+  static propTypes = {
+    getFollowList: PropTypes.func
+  }
+
+  componentDidMount() {
+    this.props.getFollowList(107).then((res) => {
+      console.log(res);
+      if (res.payload.data.errcode === 0) {
+        this.setState({
+          data: res.payload.data.data.list
+        })
+      }
+    });
+  }
+
   render () {
+    const data = this.state.data;
+    console.log(data);
     return (
       <div>
         <Subnav
@@ -17,14 +55,15 @@ class Follows extends Component {
             path: '/follow'
           }]}/>
         <div className="g-row">
-          <div className="follow-box">
-            <div className="follow-container">
-              <ProjectCard />
-              <ProjectCard />
-              <ProjectCard />
-              <ProjectCard />
-            </div>
-          </div>
+          <Row gutter={16} className="follow-box">
+            {data.map((item, index) => {
+              console.log(item);
+              return (
+                <Col span={6} key={index}>
+                  <ProjectCard projectData={item} />
+                </Col>);
+            })}
+          </Row>
         </div>
       </div>
     )
diff --git a/client/containers/Follows/Follows.scss b/client/containers/Follows/Follows.scss
index 2ee476cc..8f5dabcb 100644
--- a/client/containers/Follows/Follows.scss
+++ b/client/containers/Follows/Follows.scss
@@ -3,10 +3,5 @@
 
 .follow-box{
     padding: 24px;
-    background-color: #FFF;
-    .follow-container{
-        display: flex;
-        display: -webkit-flex;
-    }
-    
-}
\ No newline at end of file
+    background-color: #fff;
+}
diff --git a/client/containers/Group/MemberList/MemberList.js b/client/containers/Group/MemberList/MemberList.js
index d1691ae8..a87062aa 100644
--- a/client/containers/Group/MemberList/MemberList.js
+++ b/client/containers/Group/MemberList/MemberList.js
@@ -6,8 +6,7 @@ class MemberList extends Component {
   render() {
     return (
       <div className="m-panel">
-        chengyuan 列表 成员
-
+        
       </div>
     );
   }
diff --git a/client/containers/Group/ProjectList/ProjectList.js b/client/containers/Group/ProjectList/ProjectList.js
index 04be893e..5828b950 100644
--- a/client/containers/Group/ProjectList/ProjectList.js
+++ b/client/containers/Group/ProjectList/ProjectList.js
@@ -133,17 +133,17 @@ class ProjectList extends Component {
     })
   }
 
-  // 分页逻辑
-  @autobind
-  paginationChange(pageNum) {
-    this.props.fetchProjectList(this.props.currGroup._id, pageNum).then((res) => {
-      if (res.payload.data.errcode) {
-        message.error(res.payload.data.errmsg);
-      } else {
-        this.props.changeTableLoading(false);
-      }
-    });
-  }
+  // // 分页逻辑 取消分页
+  // @autobind
+  // paginationChange(pageNum) {
+  //   this.props.fetchProjectList(this.props.currGroup._id, pageNum).then((res) => {
+  //     if (res.payload.data.errcode) {
+  //       message.error(res.payload.data.errmsg);
+  //     } else {
+  //       this.props.changeTableLoading(false);
+  //     }
+  //   });
+  // }
 
   componentWillReceiveProps(nextProps) {
     // 切换分组
diff --git a/client/reducer/modules/follow.js b/client/reducer/modules/follow.js
new file mode 100644
index 00000000..a7c4130b
--- /dev/null
+++ b/client/reducer/modules/follow.js
@@ -0,0 +1,34 @@
+import axios from 'axios';
+
+// Actions
+const GET_FOLLOW_LIST = 'yapi/follow/GET_FOLLOW_LIST';
+
+// Reducer
+const initialState = {
+  data: []
+};
+
+export default (state = initialState, action) => {
+  switch (action.type) {
+    case GET_FOLLOW_LIST: {
+      console.log(action);
+      return {
+        ...state,
+        data: action.payload.data.data
+      };
+    }
+
+    default:
+      return state;
+  }
+};
+
+// Action Creators
+export function getFollowList(uid) {
+  return {
+    type: GET_FOLLOW_LIST,
+    payload: axios.get('/api/follow/list', {
+      params: { uid }
+    })
+  }
+}
diff --git a/client/reducer/modules/reducer.js b/client/reducer/modules/reducer.js
index c3623d73..bc088920 100644
--- a/client/reducer/modules/reducer.js
+++ b/client/reducer/modules/reducer.js
@@ -6,6 +6,7 @@ import inter from './interface.js'
 import news from './news.js'
 import addInterface from './addInterface.js'
 import menu from './menu.js'
+import follow from './follow.js'
 
 export default combineReducers({
   group,
@@ -14,5 +15,6 @@ export default combineReducers({
   project,
   news,
   addInterface,
-  menu
+  menu,
+  follow
 })
diff --git a/server/controllers/project.js b/server/controllers/project.js
index 3f28aba6..295e83dd 100644
--- a/server/controllers/project.js
+++ b/server/controllers/project.js
@@ -579,6 +579,7 @@ class projectController extends baseController {
      * @method GET
      * @category project
      * @foldnumber 10
+     * @author wenbo.dong
      * @param {String} project_id
     */
     async download(ctx) {
diff --git a/server_dist/controllers/project.js b/server_dist/controllers/project.js
index 62e5f276..eeb081f4 100644
--- a/server_dist/controllers/project.js
+++ b/server_dist/controllers/project.js
@@ -1284,6 +1284,7 @@ var projectController = function (_baseController) {
          * @method GET
          * @category project
          * @foldnumber 10
+         * @author wenbo.dong
          * @param {String} project_id
         */
 
diff --git a/static/doc/api.html b/static/doc/api.html
index f1cb19d4..2807a838 100644
--- a/static/doc/api.html
+++ b/static/doc/api.html
@@ -406,7 +406,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -443,7 +443,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
@@ -541,7 +541,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -637,7 +637,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -725,7 +725,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"logout success..."</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -764,7 +764,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span>
@@ -855,7 +855,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" ><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" ><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -951,7 +951,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"logout success..."</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -1436,7 +1436,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
@@ -1549,7 +1549,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#37" target="_blank">./server/controllers/project.js:37</a>
+        <a href="./static/server/controllers/project.js.html#39" target="_blank">./server/controllers/project.js:39</a>
     </p>
     
     
@@ -1661,7 +1661,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -1702,7 +1702,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#127" target="_blank">./server/controllers/project.js:127</a>
+        <a href="./static/server/controllers/project.js.html#137" target="_blank">./server/controllers/project.js:137</a>
     </p>
     
     
@@ -1756,7 +1756,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -1786,7 +1786,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#170" target="_blank">./server/controllers/project.js:170</a>
+        <a href="./static/server/controllers/project.js.html#188" target="_blank">./server/controllers/project.js:188</a>
     </p>
     
     
@@ -1840,7 +1840,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -1870,7 +1870,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#223" target="_blank">./server/controllers/project.js:223</a>
+        <a href="./static/server/controllers/project.js.html#254" target="_blank">./server/controllers/project.js:254</a>
     </p>
     
     
@@ -1912,7 +1912,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>
@@ -1948,7 +1948,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#248" target="_blank">./server/controllers/project.js:248</a>
+        <a href="./static/server/controllers/project.js.html#279" target="_blank">./server/controllers/project.js:279</a>
     </p>
     
     
@@ -1990,7 +1990,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -2031,7 +2031,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#272" target="_blank">./server/controllers/project.js:272</a>
+        <a href="./static/server/controllers/project.js.html#303" target="_blank">./server/controllers/project.js:303</a>
     </p>
     
     
@@ -2073,7 +2073,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -2258,7 +2258,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#313" target="_blank">./server/controllers/project.js:313</a>
+        <a href="./static/server/controllers/project.js.html#344" target="_blank">./server/controllers/project.js:344</a>
     </p>
     
     
@@ -2300,7 +2300,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -2330,7 +2330,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#373" target="_blank">./server/controllers/project.js:373</a>
+        <a href="./static/server/controllers/project.js.html#419" target="_blank">./server/controllers/project.js:419</a>
     </p>
     
     
@@ -2448,7 +2448,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code">
 <span class="token comment" spellcheck="true">//请求示例</span>
 <span class="token punctuation">{</span>
     <span class="token string">"id"</span><span class="token punctuation">:</span> <span class="token number">8</span><span class="token punctuation">,</span>
@@ -2490,7 +2490,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#464" target="_blank">./server/controllers/project.js:464</a>
+        <a href="./static/server/controllers/project.js.html#520" target="_blank">./server/controllers/project.js:520</a>
     </p>
     
     
@@ -2532,7 +2532,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -2585,7 +2585,7 @@
     
     <p>
         <small class="text-muted">源码位置:</small>
-        <a href="./static/server/controllers/project.js.html#519" target="_blank">./server/controllers/project.js:519</a>
+        <a href="./static/server/controllers/project.js.html#575" target="_blank">./server/controllers/project.js:575</a>
     </p>
     
     
@@ -2868,7 +2868,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code">
 <span class="token comment" spellcheck="true">//请求  /interface/add</span>
 <span class="token comment" spellcheck="true">//header Content-Type:application/json</span>
 
@@ -3003,7 +3003,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span><span class="token keyword">get</span><span class="token punctuation">.</span>json</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span><span class="token keyword">get</span><span class="token punctuation">.</span>json</code></pre>
     
     
 </div>
@@ -3068,7 +3068,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span>list<span class="token punctuation">.</span>json</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span>list<span class="token punctuation">.</span>json</code></pre>
     
     
 </div>
@@ -3293,7 +3293,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -3366,7 +3366,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span>
     <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span>
     <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span>
     <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span>
@@ -3461,7 +3461,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>list</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>list</code></pre>
     
     
 </div>
@@ -3526,7 +3526,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>del</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>del</code></pre>
     
     
 </div>
@@ -3536,7 +3536,7 @@
         <h3 id="-follow-add" class="page-header subject">
             /follow/add
             
-            <span class="ui-badge">POST</span>
+            <span class="ui-badge">GET</span>
             
             
             <a class="hashlink" href="#-follow-add">#</a>
@@ -3627,7 +3627,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>add</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>add</code></pre>
     
     
 </div>
@@ -4344,9 +4344,9 @@
             </thead>
             
             <tr>
-                <td>uid</td>
+                <td>typeid</td>
                 <td>Number</td>
-                <td>用户id, 不能为空</td>
+                <td>动态类型id, 不能为空</td>
                 <td>
                     
                     <i class="yo-ico glyphicon glyphicon-ok text-success"></i>
@@ -4380,7 +4380,7 @@
     
     
     <div>示例:</div>
-    <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>log<span class="token operator">/</span>list</code></pre>
+    <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>log<span class="token operator">/</span>list</code></pre>
     
     
 </div>
@@ -4435,8 +4435,8 @@
                 var $this = $(this);
                 $this.removeClass('extend').addClass('fold');
                 $this.html('折叠代码');
-                $this.prev().height('auto');
-                $this.prev().parent().height('auto');
+                $this.parent().children('.js-code').height('auto');
+                $this.parent().height('auto');
             });
             $('.ydoc-example').delegate('.fold', 'click', function() {
                 var $this = $(this);
@@ -4444,7 +4444,7 @@
                 EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6);
                 $this.removeClass('fold').addClass('extend');
                 $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre
-                $this.prev().height(EXAMPLE_MAX_HEIGHT); // code
+                $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code
                 $this.html("展开更多……");
             });
         }
diff --git a/static/doc/index.html b/static/doc/index.html
index 1aab9b97..54da277b 100644
--- a/static/doc/index.html
+++ b/static/doc/index.html
@@ -175,8 +175,8 @@
                 var $this = $(this);
                 $this.removeClass('extend').addClass('fold');
                 $this.html('折叠代码');
-                $this.prev().height('auto');
-                $this.prev().parent().height('auto');
+                $this.parent().children('.js-code').height('auto');
+                $this.parent().height('auto');
             });
             $('.ydoc-example').delegate('.fold', 'click', function() {
                 var $this = $(this);
@@ -184,7 +184,7 @@
                 EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6);
                 $this.removeClass('fold').addClass('extend');
                 $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre
-                $this.prev().height(EXAMPLE_MAX_HEIGHT); // code
+                $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code
                 $this.html("展开更多……");
             });
         }
diff --git a/static/doc/interface.html b/static/doc/interface.html
index 3032de09..db93bb8c 100644
--- a/static/doc/interface.html
+++ b/static/doc/interface.html
@@ -68,23 +68,23 @@
                 <div class="ydoc-container-content " id="readme">
                     
                     <article class="markdown-body">
-                         <h2 class="subject" id="快速开始">快速开始 <a class="hashlink" href="#快速开始">#</a></h2><h3 class="subject" id="1 接口管理架构">1 接口管理架构 <a class="hashlink" href="#1 接口管理架构">#</a></h3><p>平台以<strong>项目分组</strong> -&gt; <strong>项目</strong> -&gt; <strong>接口</strong>的划分进行接口组织管理。</p>
+                         <h2 class="subject" id="快速开始">快速开始 <a class="hashlink" href="#快速开始">#</a></h2><h3 class="subject" id="1_接口管理架构">1 接口管理架构 <a class="hashlink" href="#1_接口管理架构">#</a></h3><p>平台以<strong>项目分组</strong> -&gt; <strong>项目</strong> -&gt; <strong>接口</strong>的划分进行接口组织管理。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-305ba49a60ee1ff5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
-<h4 class="subject" id="1.1 项目分组">1.1 项目分组 <a class="hashlink" href="#1.1 项目分组">#</a></h4><p>登录之后进到项目首页,左边侧边栏显示的即分组列表。</p>
+<h4 class="subject" id="1.1_项目分组">1.1 项目分组 <a class="hashlink" href="#1.1_项目分组">#</a></h4><p>登录之后进到项目首页,左边侧边栏显示的即分组列表。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-d90ca4b3242fa760.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "200" style="margin-left:170px;display:block;" alt="图片名称" align=center /></p>
 <p>管理员有权限添加或删除分组。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-a0d4d9a98003896a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "500" style="margin-left:170px;display:block;" alt="图片名称" align=center /></p>
 <blockquote>
 <p>分组名称具有唯一性</p>
 </blockquote>
-<h4 class="subject" id="1.2 项目">1.2 项目 <a class="hashlink" href="#1.2 项目">#</a></h4><p>选中不同的分组,右边会显示该分组下的项目列表。</p>
+<h4 class="subject" id="1.2_项目">1.2 项目 <a class="hashlink" href="#1.2_项目">#</a></h4><p>选中不同的分组,右边会显示该分组下的项目列表。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-137bcae58b84715e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
 <p>创建项目需要填写项目名称,项目线上域名(添加完成后可配置项目其他环境域名),项目接口基本路径(接口路径前面相同的部分)以及项目描述。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-360a50ddb746f73d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
 <blockquote>
 <p>项目『线上域名 + 基本路径』具有唯一性</p>
 </blockquote>
-<h4 class="subject" id="1.3 接口">1.3 接口 <a class="hashlink" href="#1.3 接口">#</a></h4><p>点击项目名称,进入该项目接口列表。</p>
+<h4 class="subject" id="1.3_接口">1.3 接口 <a class="hashlink" href="#1.3_接口">#</a></h4><p>点击项目名称,进入该项目接口列表。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-e858005f714f4889.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
 <p>点击编辑,进入接口详情页(之后接口详情页和编辑也会分开),可以编辑接口或者请求测试真实接口。</p>
 <p><img src="http://upload-images.jianshu.io/upload_images/842107-78c0ea839619d068.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
@@ -134,8 +134,8 @@
                 var $this = $(this);
                 $this.removeClass('extend').addClass('fold');
                 $this.html('折叠代码');
-                $this.prev().height('auto');
-                $this.prev().parent().height('auto');
+                $this.parent().children('.js-code').height('auto');
+                $this.parent().height('auto');
             });
             $('.ydoc-example').delegate('.fold', 'click', function() {
                 var $this = $(this);
@@ -143,7 +143,7 @@
                 EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6);
                 $this.removeClass('fold').addClass('extend');
                 $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre
-                $this.prev().height(EXAMPLE_MAX_HEIGHT); // code
+                $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code
                 $this.html("展开更多……");
             });
         }
diff --git a/static/doc/mock.html b/static/doc/mock.html
index 1117c391..9af52501 100644
--- a/static/doc/mock.html
+++ b/static/doc/mock.html
@@ -70,7 +70,7 @@
                     <article class="markdown-body">
                          <h2 class="subject" id="Mock功能">Mock功能 <a class="hashlink" href="#Mock功能">#</a></h2> <p style='text-indent:2em;line-height:1.8em'>yapi的Mock功能可以根据用户的输入接口信息如协议、URL、接口名、请求头、请求参数、mock规则(<a href="#mock">点击到Mock规则</a>)生成Mock接口,这些接口会自动生成模拟数据,支持复杂的生成逻辑,创建者可以自由构造需要的数据。而且与常见的Mock方式如将Mock写在代码里和JS拦截等相比yapi的Mock在使用场景和效率和复杂度上是相差甚远的,正是由于yapi的Mock是一个第三方平台那么在 团队开发时任何人都可以权限许可下创建、修改接口信息等操作,这对于团队开发是很有好处的。</p>
 
-<h3 class="subject" id="1 Mock步骤">1 Mock步骤 <a class="hashlink" href="#1 Mock步骤">#</a></h3><h4 class="subject" id="1.1 创建接口">1.1 创建接口 <a class="hashlink" href="#1.1 创建接口">#</a></h4><p>通过点击页面上的&quot;+添加接口&quot;</p>
+<h3 class="subject" id="1_Mock步骤">1 Mock步骤 <a class="hashlink" href="#1_Mock步骤">#</a></h3><h4 class="subject" id="1.1_创建接口">1.1 创建接口 <a class="hashlink" href="#1.1_创建接口">#</a></h4><p>通过点击页面上的&quot;+添加接口&quot;</p>
 <p><img src="http://note.youdao.com/yws/api/personal/file/WEB613bd4f29db038f2b41c03dcfceda2b6?method=download&shareKey=29bfc2b855f6f26ce0079baf567e54cc" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
 <p> 输入协议、URL、接口名、请求头、请求参数、Mock规则(<a href="#mock">点击到Mock规则</a>)等信息。</p>
 <p><img src="http://note.youdao.com/yws/api/personal/file/WEB680a37ba304768804b23cf2cf36ed40d?method=download&shareKey=0d750695dce3a4c7abf697fa58d24c57" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
@@ -84,14 +84,14 @@
 <p>取到上面的链接在浏览器中请求就可以得到如下结果。</p>
 <p><img src="http://note.youdao.com/yws/api/personal/file/WEB1d1f7dc7b83a8cd6f576953cf45e9719?method=download&shareKey=99b4af9baac527b969543dd0a909d2a1" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p>
 <p><span id = "mock"></span></p>
-<h3 class="subject" id="2.1 Mock语法规范">2.1 Mock语法规范 <a class="hashlink" href="#2.1 Mock语法规范">#</a></h3><blockquote>
+<h3 class="subject" id="2.1_Mock语法规范">2.1 Mock语法规范 <a class="hashlink" href="#2.1_Mock语法规范">#</a></h3><blockquote>
 <p>了解更多Mock详情:<a href="https://github.com/nuysoft/Mock/wiki/Syntax-Specification">Mock.js 官方文档</a></p>
 </blockquote>
 <p>Mock.js 的语法规范包括两部分:</p>
 <p><a href="#DTD">1. 数据模板定义规范(Data Template Definition,DTD)</a></p>
 <p><a href="#DPD">2. 数据占位符定义规范(Data Placeholder Definition,DPD)</a></p>
 <p><span id = "DTD"></span></p>
-<h3 class="subject" id="数据模板定义规范(Data Template Definition,DTD)">数据模板定义规范(Data Template Definition,DTD) <a class="hashlink" href="#数据模板定义规范(Data Template Definition,DTD)">#</a></h3><p>数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:</p>
+<h3 class="subject" id="数据模板定义规范(Data_Template_Definition,DTD)">数据模板定义规范(Data Template Definition,DTD) <a class="hashlink" href="#数据模板定义规范(Data_Template_Definition,DTD)">#</a></h3><p>数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:</p>
 <pre><code>// 属性名   name (与生成规则之间用 "|<span class="token string">" 隔开)
 // 生成规则 rule(生成规则有7种详见下面的生成规则)
 // 属性值   value(可以含有 "</span>@占位符" 同时也指定了最终值的初始值和类型)
@@ -107,14 +107,14 @@
 'name|count.dcount'<span class="token operator">:</span> value
 'name|+step'<span class="token operator">:</span> value
 </code></pre><p>下面提供了6种生成规则以及示例包括 String、Number、Boolean、Object、Array:</p>
-<h4 class="subject" id="1. 属性值是字符串 String">1. 属性值是字符串 String <a class="hashlink" href="#1. 属性值是字符串 String">#</a></h4><pre><code><span class="token number">1</span>. 'name|min-max'<span class="token operator">:</span> string
+<h4 class="subject" id="1._属性值是字符串_String">1. 属性值是字符串 String <a class="hashlink" href="#1._属性值是字符串_String">#</a></h4><pre><code><span class="token number">1</span>. 'name|min-max'<span class="token operator">:</span> string
 
 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
 
 <span class="token number">2</span>. 'name|count'<span class="token operator">:</span> string
 
 通过重复 string 生成一个字符串,重复次数等于 count。
-</code></pre><h4 class="subject" id="2. 属性值是数字 Number">2. 属性值是数字 Number <a class="hashlink" href="#2. 属性值是数字 Number">#</a></h4><pre><code><span class="token number">1</span>. 'name|+<span class="token number">1</span>'<span class="token operator">:</span> number
+</code></pre><h4 class="subject" id="2._属性值是数字_Number">2. 属性值是数字 Number <a class="hashlink" href="#2._属性值是数字_Number">#</a></h4><pre><code><span class="token number">1</span>. 'name|+<span class="token number">1</span>'<span class="token operator">:</span> number
 
 属性值自动加 <span class="token number">1</span>,初始值为 number。
 
@@ -140,21 +140,21 @@ Mock.mock(<span class="token punctuation">{</span>
     <span class="token property">"number3"</span><span class="token operator">:</span> <span class="token number">123.777</span><span class="token punctuation">,</span>
     <span class="token property">"number4"</span><span class="token operator">:</span> <span class="token number">123.1231091814</span>
 <span class="token punctuation">}</span>
-</code></pre><h4 class="subject" id="3. 属性值是布尔型 Boolean">3. 属性值是布尔型 Boolean <a class="hashlink" href="#3. 属性值是布尔型 Boolean">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> boolean
+</code></pre><h4 class="subject" id="3._属性值是布尔型_Boolean">3. 属性值是布尔型 Boolean <a class="hashlink" href="#3._属性值是布尔型_Boolean">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> boolean
 
 随机生成一个布尔值,值为 <span class="token boolean">true</span> 的概率是 <span class="token number">1</span>/<span class="token number">2</span>,值为 <span class="token boolean">false</span> 的概率同样是 <span class="token number">1</span>/<span class="token number">2</span>。
 
 <span class="token number">2</span>. 'name|min-max'<span class="token operator">:</span> value
 
 随机生成一个布尔值,值为 value 的概率是 min / (min + max<span class="token punctuation">)</span>,值为 !value 的概率是 max / (min + max<span class="token punctuation">)</span>。
-</code></pre><h4 class="subject" id="4. 属性值是对象 Object">4. 属性值是对象 Object <a class="hashlink" href="#4. 属性值是对象 Object">#</a></h4><pre><code><span class="token number">1</span>. 'name|count'<span class="token operator">:</span> object
+</code></pre><h4 class="subject" id="4._属性值是对象_Object">4. 属性值是对象 Object <a class="hashlink" href="#4._属性值是对象_Object">#</a></h4><pre><code><span class="token number">1</span>. 'name|count'<span class="token operator">:</span> object
 
 从属性值 object 中随机选取 count 个属性。
 
 <span class="token number">2</span>. 'name|min-max'<span class="token operator">:</span> object
 
 从属性值 object 中随机选取 min 到 max 个属性。
-</code></pre><h4 class="subject" id="5. 属性值是数组 Array">5. 属性值是数组 Array <a class="hashlink" href="#5. 属性值是数组 Array">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> array
+</code></pre><h4 class="subject" id="5._属性值是数组_Array">5. 属性值是数组 Array <a class="hashlink" href="#5._属性值是数组_Array">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> array
 
 从属性值 array 中随机选取 <span class="token number">1</span> 个元素,作为最终值。
 
@@ -170,7 +170,7 @@ Mock.mock(<span class="token punctuation">{</span>
 
 通过重复属性值 array 生成一个新数组,重复次数为 count。
 </code></pre><p><span id = "DPD"></span></p>
-<h3 class="subject" id="数据占位符定义规范(Data Placeholder Definition,DPD)">数据占位符定义规范(Data Placeholder Definition,DPD) <a class="hashlink" href="#数据占位符定义规范(Data Placeholder Definition,DPD)">#</a></h3><pre><code>占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。
+<h3 class="subject" id="数据占位符定义规范(Data_Placeholder_Definition,DPD)">数据占位符定义规范(Data Placeholder Definition,DPD) <a class="hashlink" href="#数据占位符定义规范(Data_Placeholder_Definition,DPD)">#</a></h3><pre><code>占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。
 
 占位符 的格式为:
 
@@ -240,8 +240,8 @@ name<span class="token operator">:</span> <span class="token punctuation">{</spa
                 var $this = $(this);
                 $this.removeClass('extend').addClass('fold');
                 $this.html('折叠代码');
-                $this.prev().height('auto');
-                $this.prev().parent().height('auto');
+                $this.parent().children('.js-code').height('auto');
+                $this.parent().height('auto');
             });
             $('.ydoc-example').delegate('.fold', 'click', function() {
                 var $this = $(this);
@@ -249,7 +249,7 @@ name<span class="token operator">:</span> <span class="token punctuation">{</spa
                 EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6);
                 $this.removeClass('fold').addClass('extend');
                 $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre
-                $this.prev().height(EXAMPLE_MAX_HEIGHT); // code
+                $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code
                 $this.html("展开更多……");
             });
         }
diff --git a/static/doc/source/app.js b/static/doc/source/app.js
index 6ad0bec1..a99b7be9 100644
--- a/static/doc/source/app.js
+++ b/static/doc/source/app.js
@@ -129,7 +129,8 @@ $(document).ready(function() {
     });
 
     $('.markdown-body pre').map(function(i, item) {
-        $(item).addClass('ydoc-example');
+        $(item).addClass('ydoc-example').append('<div class="ui-copy js-copy" data-clipboard-action="copy" data-clipboard-target=".js-code-' + i + '" data-copy-number="' + i + '">copy</div><div class="copy-tip copy-tip-' + i + '">已复制</div>');
+        $(item).children('code').addClass('js-code-'+i);
     });
 
     var winHeight = $(window).height() - 44,
@@ -213,4 +214,17 @@ $(document).ready(function() {
             return false;
         }
     }
+
+    // 代码复制功能
+    var clipboard = new Clipboard('.js-copy');
+
+    clipboard.on('success', function(e) {
+      var copyNumber = $(e.trigger).attr('data-copy-number');
+      $('.copy-tip-'+copyNumber).show();
+      setTimeout(function() {
+          $('.copy-tip-'+copyNumber).hide();
+      }, 1000);
+      e.clearSelection();
+    });
+
 });
diff --git a/static/doc/source/code.css b/static/doc/source/code.css
index c4775fde..df68bdb0 100644
--- a/static/doc/source/code.css
+++ b/static/doc/source/code.css
@@ -1 +1 @@
-@charset "UTF-8";.syntaxhighlighter .toolbar a,.syntaxhighlighter.printing a{text-decoration:none!important}.ydoc .task-list,menu,ol,ul{list-style:none}.syntaxhighlighter a,.syntaxhighlighter code,.syntaxhighlighter div,.syntaxhighlighter table,.syntaxhighlighter table caption,.syntaxhighlighter table tbody,.syntaxhighlighter table td,.syntaxhighlighter table thead,.syntaxhighlighter table tr,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:0 0!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:400!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important}.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}.syntaxhighlighter,.syntaxhighlighter table td.code .container{position:relative!important}.syntaxhighlighter,.syntaxhighlighter table,.syntaxhighlighter table td.code{width:100%!important}.syntaxhighlighter .bold,.syntaxhighlighter .keyword,.syntaxhighlighter .script,.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter{margin:1em 0!important;overflow:auto!important;font-size:1em!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .line{white-space:pre!important}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter table td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter .toolbar span.title,.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource,.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:0 0!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content,.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter .line.highlighted.number,.syntaxhighlighter table caption,.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter,.syntaxhighlighter .line.alt1,.syntaxhighlighter .line.alt2{background-color:#fff!important}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important}.syntaxhighlighter .gutter{color:#afafaf!important}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a,.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#069!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{color:#069!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&amp;v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%}
\ No newline at end of file
+@charset "UTF-8";.syntaxhighlighter .toolbar a,.syntaxhighlighter.printing a{text-decoration:none!important}.ydoc .task-list,menu,ol,ul{list-style:none}.syntaxhighlighter a,.syntaxhighlighter code,.syntaxhighlighter div,.syntaxhighlighter table,.syntaxhighlighter table caption,.syntaxhighlighter table tbody,.syntaxhighlighter table td,.syntaxhighlighter table thead,.syntaxhighlighter table tr,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:0 0!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:400!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important}.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}.syntaxhighlighter,.syntaxhighlighter table td.code .container{position:relative!important}.syntaxhighlighter,.syntaxhighlighter table,.syntaxhighlighter table td.code{width:100%!important}.syntaxhighlighter .bold,.syntaxhighlighter .keyword,.syntaxhighlighter .script,.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter{margin:1em 0!important;overflow:auto!important;font-size:1em!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .line{white-space:pre!important}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter table td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter .toolbar span.title,.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource,.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:0 0!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content,.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter .line.highlighted.number,.syntaxhighlighter table caption,.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter,.syntaxhighlighter .line.alt1,.syntaxhighlighter .line.alt2{background-color:#fff!important}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important}.syntaxhighlighter .gutter{color:#afafaf!important}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a,.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#069!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{color:#069!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&amp;v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .ydoc-example .ui-copy{position:absolute;right:0;top:-1px;text-align:center;line-height:20px;width:40px;height:24px;border-left:1px solid #ccc;border-bottom:1px solid #ccc;border-bottom-left-radius:3px;background-color:#efefef;cursor:pointer;user-select:none;transition:all .4s;transform:translateY(0)}.ydoc-container-content .ydoc-example .ui-copy:hover{transform:translateY(1px);background-color:#fff}.ydoc-container-content .ydoc-example .copy-tip{display:none;color:#fff;padding:4px;border-radius:4px;position:absolute;right:0;top:27px;background-color:rgba(0,0,0,.85)}.ydoc-container-content .ydoc-example .copy-tip:after{content:'';display:block;position:absolute;right:20px;top:-8px;transform:translateX(50%);width:0;height:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.85)}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%}
\ No newline at end of file
diff --git a/static/doc/source/main.css b/static/doc/source/main.css
index f7791892..367c06fd 100644
--- a/static/doc/source/main.css
+++ b/static/doc/source/main.css
@@ -1 +1 @@
-@charset "UTF-8";.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.ydoc .task-list,menu,ol,ul{list-style:none}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&amp;v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%}
\ No newline at end of file
+@charset "UTF-8";.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.ydoc .task-list,menu,ol,ul{list-style:none}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&amp;v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .ydoc-example .ui-copy{position:absolute;right:0;top:-1px;text-align:center;line-height:20px;width:40px;height:24px;border-left:1px solid #ccc;border-bottom:1px solid #ccc;border-bottom-left-radius:3px;background-color:#efefef;cursor:pointer;user-select:none;transition:all .4s;transform:translateY(0)}.ydoc-container-content .ydoc-example .ui-copy:hover{transform:translateY(1px);background-color:#fff}.ydoc-container-content .ydoc-example .copy-tip{display:none;color:#fff;padding:4px;border-radius:4px;position:absolute;right:0;top:27px;background-color:rgba(0,0,0,.85)}.ydoc-container-content .ydoc-example .copy-tip:after{content:'';display:block;position:absolute;right:20px;top:-8px;transform:translateX(50%);width:0;height:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.85)}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%}
\ No newline at end of file
diff --git a/static/doc/source/main.js b/static/doc/source/main.js
index 6c4dbac6..af8d4e62 100644
--- a/static/doc/source/main.js
+++ b/static/doc/source/main.js
@@ -1,6 +1,6 @@
-function AnchorJS(e){"use strict";this.options=e||{},this._applyRemainingDefaultOptions=function(e){this.options.icon=this.options.hasOwnProperty("icon")?e.icon:"&#xe9cb",this.options.visible=this.options.hasOwnProperty("visible")?e.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?e.placement:"right",this.options.class=this.options.hasOwnProperty("class")?e.class:""},this._applyRemainingDefaultOptions(e),this.add=function(e){var t,n,i,o,r,s,a,l,c,u,d,f,p,h;if(this._applyRemainingDefaultOptions(this.options),e){if("string"!=typeof e)throw new Error("The selector provided to AnchorJS was invalid.")}else e="h1, h2, h3, h4, h5, h6";if(t=document.querySelectorAll(e),0===t.length)return!1;for(this._addBaselineStyles(),n=document.querySelectorAll("[id]"),i=[].map.call(n,function(e){return e.id}),r=0;r<t.length;r++){if(t[r].hasAttribute("id"))o=t[r].getAttribute("id");else{s=t[r].textContent,a=s.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,32).replace(/^-+|-+$/gm,"").toLowerCase(),u=a,c=0;do void 0!==l&&(u=a+"-"+c),l=i.indexOf(u),c+=1;while(-1!==l);l=void 0,i.push(u),t[r].setAttribute("id",u),o=u}d=o.replace(/-/g," "),f='<a class="anchorjs-link '+this.options.class+'" href="#'+o+'" aria-label="Anchor link for: '+d+'" data-anchorjs-icon="'+this.options.icon+'"></a>',p=document.createElement("div"),p.innerHTML=f,h=p.childNodes,"always"===this.options.visible&&(h[0].style.opacity="1"),"&#xe9cb"===this.options.icon&&(h[0].style.fontFamily="anchorjs-icons",h[0].style.fontStyle="normal",h[0].style.fontVariant="normal",h[0].style.fontWeight="normal"),"left"===this.options.placement?(h[0].style.position="absolute",h[0].style.marginLeft="-1em",h[0].style.paddingRight="0.5em",t[r].insertBefore(h[0],t[r].firstChild)):(h[0].style.paddingLeft="0.375em",t[r].appendChild(h[0]))}return this},this.remove=function(e){for(var t,n=document.querySelectorAll(e),i=0;i<n.length;i++)t=n[i].querySelector(".anchorjs-link"),t&&n[i].removeChild(t);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var e,t=document.createElement("style"),n=" .anchorjs-link {   opacity: 0;   text-decoration: none;   -webkit-font-smoothing: antialiased;   -moz-osx-font-smoothing: grayscale; }",i=" *:hover > .anchorjs-link, .anchorjs-link:focus  {   opacity: 1; }",o=' @font-face {   font-family: "anchorjs-icons";   font-style: normal;   font-weight: normal;   src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',r=" [data-anchorjs-icon]::after {   content: attr(data-anchorjs-icon); }";t.className="anchorjs",t.appendChild(document.createTextNode("")),e=document.head.querySelector('[rel="stylesheet"], style'),void 0===e?document.head.appendChild(t):document.head.insertBefore(t,e),t.sheet.insertRule(n,t.sheet.cssRules.length),t.sheet.insertRule(i,t.sheet.cssRules.length),t.sheet.insertRule(r,t.sheet.cssRules.length),t.sheet.insertRule(o,t.sheet.cssRules.length)}}}if(!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"!==n&&!oe.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(fe.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function r(e){var t=Ae[e]={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",a,!1),e.removeEventListener("load",a,!1)):(he.detachEvent("onreadystatechange",a),e.detachEvent("onload",a))}function a(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(s(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Ee,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Te.test(n)?oe.parseJSON(n):n)}catch(e){}oe.data(e,t,n)}else n=void 0}return n}function c(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(e,t,n,i){if(oe.acceptData(e)){var o,r,s=oe.expando,a=e.nodeType,l=a?oe.cache:e,c=a?e[s]:e[s]&&s;if(c&&l[c]&&(i||l[c].data)||void 0!==n||"string"!=typeof t)return c||(c=a?e[s]=X.pop()||oe.guid++:s),l[c]||(l[c]=a?{}:{toJSON:oe.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[c]=oe.extend(l[c],t):l[c].data=oe.extend(l[c].data,t)),r=l[c],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?(o=r[t],null==o&&(o=r[oe.camelCase(t)])):o=r,o}}function d(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,s=r?oe.cache:e,a=r?e[oe.expando]:oe.expando;if(s[a]){if(t&&(i=n?s[a]:s[a].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!c(i):!oe.isEmptyObject(i))return}(n||(delete s[a].data,c(s[a])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function f(){return!0}function p(){return!1}function h(){try{return he.activeElement}catch(e){}}function g(e){var t=Re.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==Ce?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==Ce?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){$e.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function A(e){var t=Ge.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function w(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),s=oe._data(t,r),a=r.events;if(a){delete s.handle,s.events={};for(n in a)for(i=0,o=a[n].length;o>i;i++)oe.event.add(t,n,a[n][i])}s.data&&(s.data=oe.extend({},s.data))}}function C(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,A(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&$e.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function T(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function E(e){var t=he,n=Ke[e];return n||(n=T(e,t),"none"!==n&&n||(Je=(Je||oe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(Je[0].contentWindow||Je[0].contentDocument).document,t.write(),t.close(),n=T(e,t),Je.detach()),Ke[e]=n),n}function S(e,t){return{get:function(){var n=e();if(null!=n)return n?void delete this.get:(this.get=t).apply(this,arguments)}}}function k(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,o=ft.length;o--;)if(t=ft[o]+n,t in e)return t;return i}function N(e,t){for(var n,i,o,r=[],s=0,a=e.length;a>s;s++)i=e[s],i.style&&(r[s]=oe._data(i,"olddisplay"),n=i.style.display,t?(r[s]||"none"!==n||(i.style.display=""),""===i.style.display&&Ne(i)&&(r[s]=oe._data(i,"olddisplay",E(i.nodeName)))):(o=Ne(i),(n&&"none"!==n||!o)&&oe._data(i,"olddisplay",o?n:oe.css(i,"display"))));for(s=0;a>s;s++)i=e[s],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?r[s]||"":"none"));return e}function D(e,t,n){var i=lt.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function $(e,t,n,i,o){for(var r=n===(i?"border":"content")?4:"width"===t?1:0,s=0;4>r;r+=2)"margin"===n&&(s+=oe.css(e,n+ke[r],!0,o)),i?("content"===n&&(s-=oe.css(e,"padding"+ke[r],!0,o)),"margin"!==n&&(s-=oe.css(e,"border"+ke[r]+"Width",!0,o))):(s+=oe.css(e,"padding"+ke[r],!0,o),"padding"!==n&&(s+=oe.css(e,"border"+ke[r]+"Width",!0,o)));return s}function j(e,t,n){var i=!0,o="width"===t?e.offsetWidth:e.offsetHeight,r=et(e),s=ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,r);if(0>=o||null==o){if(o=tt(e,t,r),(0>o||null==o)&&(o=e.style[t]),it.test(o))return o;i=s&&(ne.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+$(e,t,n||(s?"border":"content"),i,r)+"px"}function L(e,t,n,i,o){return new L.prototype.init(e,t,n,i,o)}function O(){return setTimeout(function(){pt=void 0}),pt=oe.now()}function I(e,t){var n,i={height:e},o=0;for(t=t?1:0;4>o;o+=2-t)n=ke[o],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function B(e,t,n){for(var i,o=(bt[t]||[]).concat(bt["*"]),r=0,s=o.length;s>r;r++)if(i=o[r].call(n,t,e))return i}function R(e,t,n){var i,o,r,s,a,l,c,u,d=this,f={},p=e.style,h=e.nodeType&&Ne(e),g=oe._data(e,"fxshow");n.queue||(a=oe._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,l=a.empty.fire,a.empty.fire=function(){a.unqueued||l()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,oe.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],c=oe.css(e,"display"),u="none"===c?oe._data(e,"olddisplay")||E(e.nodeName):c,"inline"===u&&"none"===oe.css(e,"float")&&(ne.inlineBlockNeedsLayout&&"inline"!==E(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",ne.shrinkWrapBlocks()||d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(i in t)if(o=t[i],gt.exec(o)){if(delete t[i],r=r||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!g||void 0===g[i])continue;h=!0}f[i]=g&&g[i]||oe.style(e,i)}else c=void 0;if(oe.isEmptyObject(f))"inline"===("none"===c?E(e.nodeName):c)&&(p.display=c);else{g?"hidden"in g&&(h=g.hidden):g=oe._data(e,"fxshow",{}),r&&(g.hidden=!h),h?oe(e).show():d.done(function(){oe(e).hide()}),d.done(function(){var t;oe._removeData(e,"fxshow");for(t in f)oe.style(e,t,f[t])});for(i in f)s=B(h?g[i]:0,i,d),i in g||(g[i]=s.start,h&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function H(e,t){var n,i,o,r,s;for(n in e)if(i=oe.camelCase(n),o=t[i],r=e[n],oe.isArray(r)&&(o=r[1],r=e[n]=r[0]),n!==i&&(e[i]=r,delete e[n]),s=oe.cssHooks[i],s&&"expand"in s){r=s.expand(r),delete e[i];for(n in r)n in e||(e[n]=r[n],t[n]=o)}else t[i]=o}function M(e,t,n){var i,o,r=0,s=yt.length,a=oe.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var t=pt||O(),n=Math.max(0,c.startTime+c.duration-t),i=n/c.duration||0,r=1-i,s=0,l=c.tweens.length;l>s;s++)c.tweens[s].run(r);return a.notifyWith(e,[c,r,n]),1>r&&l?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:oe.extend({},t),opts:oe.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:pt||O(),duration:n.duration,tweens:[],createTween:function(t,n){var i=oe.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(i),i},stop:function(t){var n=0,i=t?c.tweens.length:0;if(o)return this;for(o=!0;i>n;n++)c.tweens[n].run(1);return t?a.resolveWith(e,[c,t]):a.rejectWith(e,[c,t]),this}}),u=c.props;for(H(u,c.opts.specialEasing);s>r;r++)if(i=yt[r].call(c,e,u,c.opts))return i;return oe.map(u,B,c),oe.isFunction(c.opts.start)&&c.opts.start.call(e,c),oe.fx.timer(oe.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function F(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,r=t.toLowerCase().match(be)||[];if(oe.isFunction(n))for(;i=r[o++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function P(e,t,n,i){function o(a){var l;return r[a]=!0,oe.each(e[a]||[],function(e,a){var c=a(t,n,i);return"string"!=typeof c||s||r[c]?s?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),l}var r={},s=e===_t;return o(t.dataTypes[0])||!r["*"]&&o("*")}function z(e,t){var n,i,o=oe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((o[i]?e:n||(n={}))[i]=t[i]);return n&&oe.extend(!0,e,n),e}function q(e,t,n){for(var i,o,r,s,a=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(s in a)if(a[s]&&a[s].test(o)){l.unshift(s);break}if(l[0]in n)r=l[0];else{for(s in n){if(!l[0]||e.converters[s+" "+l[0]]){r=s;break}i||(i=s)}r=r||i}return r?(r!==l[0]&&l.unshift(r),n[r]):void 0}function _(e,t,n,i){var o,r,s,a,l,c={},u=e.dataTypes.slice();if(u[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(r=u.shift();r;)if(e.responseFields[r]&&(n[e.responseFields[r]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(s=c[l+" "+r]||c["* "+r],!s)for(o in c)if(a=o.split(" "),a[1]===r&&(s=c[l+" "+a[0]]||c["* "+a[0]])){s===!0?s=c[o]:c[o]!==!0&&(r=a[0],u.unshift(a[1]));break}if(s!==!0)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+l+" to "+r}}}return{state:"success",data:t}}function W(e,t,n,i){var o;if(oe.isArray(t))oe.each(t,function(t,o){n||Qt.test(e)?i(e,o):W(e+"["+("object"==typeof o?t:"")+"]",o,n,i)});else if(n||"object"!==oe.type(t))i(e,t);else for(o in t)W(e+"["+o+"]",t[o],n,i)}function U(){try{return new e.XMLHttpRequest}catch(e){}}function Q(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function G(e){return oe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var X=[],V=X.slice,Y=X.concat,Z=X.push,J=X.indexOf,K={},ee=K.toString,te=K.hasOwnProperty,ne={},ie="1.11.3",oe=function(e,t){return new oe.fn.init(e,t)},re=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,se=/^-ms-/,ae=/-([\da-z])/gi,le=function(e,t){return t.toUpperCase()};oe.fn=oe.prototype={jquery:ie,constructor:oe,selector:"",length:0,toArray:function(){return V.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:V.call(this)},pushStack:function(e){var t=oe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return oe.each(this,e,t)},map:function(e){return this.pushStack(oe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(V.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Z,sort:X.sort,splice:X.splice},oe.extend=oe.fn.extend=function(){var e,t,n,i,o,r,s=arguments[0]||{},a=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[a]||{},a++),"object"==typeof s||oe.isFunction(s)||(s={}),a===l&&(s=this,a--);l>a;a++)if(null!=(o=arguments[a]))for(i in o)e=s[i],n=o[i],s!==n&&(c&&n&&(oe.isPlainObject(n)||(t=oe.isArray(n)))?(t?(t=!1,r=e&&oe.isArray(e)?e:[]):r=e&&oe.isPlainObject(e)?e:{},s[i]=oe.extend(c,r,n)):void 0!==n&&(s[i]=n));return s},oe.extend({expando:"jQuery"+(ie+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===oe.type(e)},isArray:Array.isArray||function(e){return"array"===oe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!oe.isArray(e)&&e-parseFloat(e)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==oe.type(e)||e.nodeType||oe.isWindow(e))return!1;try{if(e.constructor&&!te.call(e,"constructor")&&!te.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(ne.ownLast)for(t in e)return te.call(e,t);for(t in e);return void 0===t||te.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?K[ee.call(e)]||"object":typeof e},globalEval:function(t){t&&oe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(se,"ms-").replace(ae,le)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,i){var o,r=0,s=e.length,a=n(e);if(i){if(a)for(;s>r&&(o=t.apply(e[r],i),o!==!1);r++);else for(r in e)if(o=t.apply(e[r],i),o===!1)break}else if(a)for(;s>r&&(o=t.call(e[r],r,e[r]),o!==!1);r++);else for(r in e)if(o=t.call(e[r],r,e[r]),o===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(re,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?oe.merge(i,"string"==typeof e?[e]:e):Z.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(J)return J.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,o=e.length;n>i;)e[o++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[o++]=t[i++];return e.length=o,e},grep:function(e,t,n){for(var i,o=[],r=0,s=e.length,a=!n;s>r;r++)i=!t(e[r],r),i!==a&&o.push(e[r]);return o},map:function(e,t,i){var o,r=0,s=e.length,a=n(e),l=[];if(a)for(;s>r;r++)o=t(e[r],r,i),null!=o&&l.push(o);else for(r in e)o=t(e[r],r,i),null!=o&&l.push(o);return Y.apply([],l)},guid:1,proxy:function(e,t){var n,i,o;return"string"==typeof t&&(o=e[t],t=e,e=o),oe.isFunction(e)?(n=V.call(arguments,2),i=function(){return e.apply(t||this,n.concat(V.call(arguments)))},i.guid=e.guid=e.guid||oe.guid++,i):void 0},now:function(){return+new Date},support:ne}),oe.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){K["[object "+t+"]"]=t.toLowerCase()});var ce=function(e){function t(e,t,n,i){var o,r,s,a,l,c,d,p,h,g;if((t?t.ownerDocument||t:P)!==L&&j(t),t=t||L,n=n||[],a=t.nodeType,"string"!=typeof e||!e||1!==a&&9!==a&&11!==a)return n;if(!i&&I){if(11!==a&&(o=ye.exec(e)))if(s=o[1]){if(9===a){if(r=t.getElementById(s),!r||!r.parentNode)return n;if(r.id===s)return n.push(r),n}else if(t.ownerDocument&&(r=t.ownerDocument.getElementById(s))&&M(t,r)&&r.id===s)return n.push(r),n}else{if(o[2])return J.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&x.getElementsByClassName)return J.apply(n,t.getElementsByClassName(s)),n}if(x.qsa&&(!B||!B.test(e))){if(p=d=F,h=t,g=1!==a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){for(c=E(e),(d=t.getAttribute("id"))?p=d.replace(Ae,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=be.test(e)&&u(t.parentNode)||t,g=c.join(",")}if(g)try{return J.apply(n,h.querySelectorAll(g)),n}catch(e){}finally{d||t.removeAttribute("id")}}}return k(e.replace(le,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[F]=!0,e}function o(e){var t=L.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function r(e,t){for(var n=e.split("|"),i=e.length;i--;)w.attrHandle[n[i]]=t}function s(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||G)-(~e.sourceIndex||G);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,i){for(var o,r=e([],n.length,t),s=r.length;s--;)n[o=r[s]]&&(n[o]=!(i[o]=n[o]))})})}function u(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function p(e,t,n){var i=t.dir,o=n&&"parentNode"===i,r=q++;return t.first?function(t,n,r){for(;t=t[i];)if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var a,l,c=[z,r];if(s){for(;t=t[i];)if((1===t.nodeType||o)&&e(t,n,s))return!0}else for(;t=t[i];)if(1===t.nodeType||o){if(l=t[F]||(t[F]={}),(a=l[i])&&a[0]===z&&a[1]===r)return c[2]=a[2];if(l[i]=c,c[2]=e(t,n,s))return!0}}}function h(e){return e.length>1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function g(e,n,i){for(var o=0,r=n.length;r>o;o++)t(e,n[o],i);return i}function m(e,t,n,i,o){for(var r,s=[],a=0,l=e.length,c=null!=t;l>a;a++)(r=e[a])&&(!n||n(r,i,o))&&(s.push(r),c&&t.push(a));return s}function v(e,t,n,o,r,s){return o&&!o[F]&&(o=v(o)),r&&!r[F]&&(r=v(r,s)),i(function(i,s,a,l){var c,u,d,f=[],p=[],h=s.length,v=i||g(t||"*",a.nodeType?[a]:a,[]),y=!e||!i&&t?v:m(v,f,e,a,l),b=n?r||(i?e:h||o)?[]:s:y;if(n&&n(y,b,a,l),o)for(c=m(b,p),o(c,[],a,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(i){if(r||e){if(r){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);r(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=r?ee(i,d):f[u])>-1&&(i[c]=!(s[c]=d))}}else b=m(b===s?b.splice(h,b.length):b),r?r(null,s,b,l):J.apply(s,b)})}function y(e){for(var t,n,i,o=e.length,r=w.relative[e[0].type],s=r||w.relative[" "],a=r?1:0,l=p(function(e){return e===t},s,!0),c=p(function(e){return ee(t,e)>-1},s,!0),u=[function(e,n,i){var o=!r&&(i||n!==N)||((t=n).nodeType?l(e,n,i):c(e,n,i));return t=null,o}];o>a;a++)if(n=w.relative[e[a].type])u=[p(h(u),n)];else{if(n=w.filter[e[a].type].apply(null,e[a].matches),n[F]){for(i=++a;o>i&&!w.relative[e[i].type];i++);return v(a>1&&h(u),a>1&&f(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(le,"$1"),n,i>a&&y(e.slice(a,i)),o>i&&y(e=e.slice(i)),o>i&&f(e))}u.push(n)}return h(u)}function b(e,n){var o=n.length>0,r=e.length>0,s=function(i,s,a,l,c){var u,d,f,p=0,h="0",g=i&&[],v=[],y=N,b=i||r&&w.find.TAG("*",c),A=z+=null==y?1:Math.random()||.1,x=b.length;for(c&&(N=s!==L&&s);h!==x&&null!=(u=b[h]);h++){if(r&&u){for(d=0;f=e[d++];)if(f(u,s,a)){l.push(u);break}c&&(z=A)}o&&((u=!f&&u)&&p--,i&&g.push(u))}if(p+=h,o&&h!==p){for(d=0;f=n[d++];)f(g,v,s,a);if(i){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=Y.call(l));v=m(v)}J.apply(l,v),c&&!i&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(z=A,N=y),g};return o?i(s):s}var A,x,w,C,T,E,S,k,N,D,$,j,L,O,I,B,R,H,M,F="sizzle"+1*new Date,P=e.document,z=0,q=0,_=n(),W=n(),U=n(),Q=function(e,t){return e===t&&($=!0),0},G=1<<31,X={}.hasOwnProperty,V=[],Y=V.pop,Z=V.push,J=V.push,K=V.slice,ee=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe=ie.replace("w","w#"),re="\\["+ne+"*("+ie+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+oe+"))|)"+ne+"*\\]",se=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+re+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),le=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),ce=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),de=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+oe+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie.replace("w","w*")+")"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},ge=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,Ae=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Ce=function(){j()};try{J.apply(V=K.call(P.childNodes),P.childNodes),V[P.childNodes.length].nodeType}catch(e){J={apply:V.length?function(e,t){Z.apply(e,K.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}x=t.support={},T=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},j=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:P;return i!==L&&9===i.nodeType&&i.documentElement?(L=i,O=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),I=!T(i),x.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=o(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ve.test(i.getElementsByClassName),x.getById=o(function(e){return O.appendChild(e).id=F,!i.getElementsByName||!i.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&I){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(xe,we);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(xe,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):x.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,r=t.getElementsByTagName(e);if("*"===e){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},w.find.CLASS=x.getElementsByClassName&&function(e,t){return I?t.getElementsByClassName(e):void 0},R=[],B=[],(x.qsa=ve.test(i.querySelectorAll))&&(o(function(e){O.appendChild(e).innerHTML="<a id='"+F+"'></a><select id='"+F+"-\f]' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&B.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||B.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||B.push("~="),e.querySelectorAll(":checked").length||B.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||B.push(".#.+[+~]")}),o(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&B.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||B.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),B.push(",.*:")})),(x.matchesSelector=ve.test(H=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&o(function(e){x.disconnectedMatch=H.call(e,"div"),H.call(e,"[s!='']:x"),R.push("!=",se)}),B=B.length&&new RegExp(B.join("|")),R=R.length&&new RegExp(R.join("|")),t=ve.test(O.compareDocumentPosition),M=t||ve.test(O.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Q=t?function(e,t){if(e===t)return $=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===i||e.ownerDocument===P&&M(P,e)?-1:t===i||t.ownerDocument===P&&M(P,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return $=!0,0;var n,o=0,r=e.parentNode,a=t.parentNode,l=[e],c=[t];if(!r||!a)return e===i?-1:t===i?1:r?-1:a?1:D?ee(D,e)-ee(D,t):0;if(r===a)return s(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[o]===c[o];)o++;return o?s(l[o],c[o]):l[o]===P?-1:c[o]===P?1:0},i):L},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==L&&j(e),n=n.replace(de,"='$1']"),!(!x.matchesSelector||!I||R&&R.test(n)||B&&B.test(n)))try{var i=H.call(e,n);if(i||x.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,L,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==L&&j(e),M(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==L&&j(e);var n=w.attrHandle[t.toLowerCase()],i=n&&X.call(w.attrHandle,t.toLowerCase())?n(e,t,!I):void 0;return void 0!==i?i:x.attributes||!I?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,o=0;if($=!x.detectDuplicates,D=!x.sortStable&&e.slice(0),e.sort(Q),$){for(;t=e[o++];)t===e[o]&&(i=n.push(o));for(;i--;)e.splice(n[i],1)}return D=null,e},C=t.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=C(t);return n},w=t.selectors={cacheLength:50,createPseudo:i,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,we),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),
-e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=_[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&_(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(o){var r=t.attr(o,e);return null==r?"!="===n:!n||(r+="","="===n?r===i:"!="===n?r!==i:"^="===n?i&&0===r.indexOf(i):"*="===n?i&&r.indexOf(i)>-1:"$="===n?i&&r.slice(-i.length)===i:"~="===n?(" "+r.replace(ae," ")+" ").indexOf(i)>-1:"|="===n&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,o){var r="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=r!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!l&&!a;if(m){if(r){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?m.firstChild:m.lastChild],s&&y){for(u=m[F]||(m[F]={}),c=u[e]||[],p=c[0]===z&&c[1],f=c[0]===z&&c[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[z,p,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===z)f=c[1];else for(;(d=++p&&d&&d[g]||(f=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[z,f]),d!==t)););return f-=o,f===i||f%i===0&&f/i>=0}}},PSEUDO:function(e,n){var o,r=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return r[F]?r(n):r.length>1?(o=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,o=r(e,n),s=o.length;s--;)i=ee(e,o[s]),e[i]=!(t[i]=o[s])}):function(e){return r(e,0,o)}):r}},pseudos:{not:i(function(e){var t=[],n=[],o=S(e.replace(le,"$1"));return o[F]?i(function(e,t,n,i){for(var r,s=o(e,null,i,[]),a=e.length;a--;)(r=s[a])&&(e[a]=!(t[a]=r))}):function(e,i,r){return t[0]=e,o(t,null,r,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(xe,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:i(function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,we).toLowerCase(),function(t){var n;do if(n=I?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===O},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return ge.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:c(function(e,t,n){for(var i=0>n?n+t:n;++i<t;)e.push(i);return e})}},w.pseudos.nth=w.pseudos.eq;for(A in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[A]=a(A);for(A in{submit:!0,reset:!0})w.pseudos[A]=l(A);return d.prototype=w.filters=w.pseudos,w.setFilters=new d,E=t.tokenize=function(e,n){var i,o,r,s,a,l,c,u=W[e+" "];if(u)return n?0:u.slice(0);for(a=e,l=[],c=w.preFilter;a;){(!i||(o=ce.exec(a)))&&(o&&(a=a.slice(o[0].length)||a),l.push(r=[])),i=!1,(o=ue.exec(a))&&(i=o.shift(),r.push({value:i,type:o[0].replace(le," ")}),a=a.slice(i.length));for(s in w.filter)!(o=he[s].exec(a))||c[s]&&!(o=c[s](o))||(i=o.shift(),r.push({value:i,type:s,matches:o}),a=a.slice(i.length));if(!i)break}return n?a.length:a?t.error(e):W(e,l).slice(0)},S=t.compile=function(e,t){var n,i=[],o=[],r=U[e+" "];if(!r){for(t||(t=E(e)),n=t.length;n--;)r=y(t[n]),r[F]?i.push(r):o.push(r);r=U(e,b(o,i)),r.selector=e}return r},k=t.select=function(e,t,n,i){var o,r,s,a,l,c="function"==typeof e&&e,d=!i&&E(e=c.selector||e);if(n=n||[],1===d.length){if(r=d[0]=d[0].slice(0),r.length>2&&"ID"===(s=r[0]).type&&x.getById&&9===t.nodeType&&I&&w.relative[r[1].type]){if(t=(w.find.ID(s.matches[0].replace(xe,we),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(r.shift().value.length)}for(o=he.needsContext.test(e)?0:r.length;o--&&(s=r[o],!w.relative[a=s.type]);)if((l=w.find[a])&&(i=l(s.matches[0].replace(xe,we),be.test(r[0].type)&&u(t.parentNode)||t))){if(r.splice(o,1),e=i.length&&f(r),!e)return J.apply(n,i),n;break}}return(c||S(e,d))(i,t,!I,n,be.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(Q).join("")===F,x.detectDuplicates=!!$,j(),x.sortDetached=o(function(e){return 1&e.compareDocumentPosition(L.createElement("div"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||r("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||r("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||r(te,function(e,t,n){var i;return n?void 0:e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);oe.find=ce,oe.expr=ce.selectors,oe.expr[":"]=oe.expr.pseudos,oe.unique=ce.uniqueSort,oe.text=ce.getText,oe.isXMLDoc=ce.isXML,oe.contains=ce.contains;var ue=oe.expr.match.needsContext,de=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,fe=/^.[^:#\[\.,]*$/;oe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?oe.find.matchesSelector(i,e)?[i]:[]:oe.find.matches(e,oe.grep(t,function(e){return 1===e.nodeType}))},oe.fn.extend({find:function(e){var t,n=[],i=this,o=i.length;if("string"!=typeof e)return this.pushStack(oe(e).filter(function(){for(t=0;o>t;t++)if(oe.contains(i[t],this))return!0}));for(t=0;o>t;t++)oe.find(e,i[t],n);return n=this.pushStack(o>1?oe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&ue.test(e)?oe(e):e||[],!1).length}});var pe,he=e.document,ge=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,me=oe.fn.init=function(e,t){var n,i;if(!e)return this;if("string"==typeof e){if(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ge.exec(e),!n||!n[1]&&t)return!t||t.jquery?(t||pe).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof oe?t[0]:t,oe.merge(this,oe.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:he,!0)),de.test(n[1])&&oe.isPlainObject(t))for(n in t)oe.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if(i=he.getElementById(n[2]),i&&i.parentNode){if(i.id!==n[2])return pe.find(e);this.length=1,this[0]=i}return this.context=he,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):oe.isFunction(e)?"undefined"!=typeof pe.ready?pe.ready(e):e(oe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),oe.makeArray(e,this))};me.prototype=oe.fn,pe=oe(he);var ve=/^(?:parents|prev(?:Until|All))/,ye={children:!0,contents:!0,next:!0,prev:!0};oe.extend({dir:function(e,t,n){for(var i=[],o=e[t];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!oe(o).is(n));)1===o.nodeType&&i.push(o),o=o[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),oe.fn.extend({has:function(e){var t,n=oe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(oe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,o=this.length,r=[],s=ue.test(e)||"string"!=typeof e?oe(e,t||this.context):0;o>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&oe.find.matchesSelector(n,e))){r.push(n);break}return this.pushStack(r.length>1?oe.unique(r):r)},index:function(e){return e?"string"==typeof e?oe.inArray(this[0],oe(e)):oe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(oe.unique(oe.merge(this.get(),oe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),oe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return oe.dir(e,"parentNode")},parentsUntil:function(e,t,n){return oe.dir(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return oe.dir(e,"nextSibling")},prevAll:function(e){return oe.dir(e,"previousSibling")},nextUntil:function(e,t,n){return oe.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return oe.dir(e,"previousSibling",n)},siblings:function(e){return oe.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return oe.sibling(e.firstChild)},contents:function(e){return oe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:oe.merge([],e.childNodes)}},function(e,t){oe.fn[e]=function(n,i){var o=oe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=oe.filter(i,o)),this.length>1&&(ye[e]||(o=oe.unique(o)),ve.test(e)&&(o=o.reverse())),this.pushStack(o)}});var be=/\S+/g,Ae={};oe.Callbacks=function(e){e="string"==typeof e?Ae[e]||r(e):oe.extend({},e);var t,n,i,o,s,a,l=[],c=!e.once&&[],u=function(r){for(n=e.memory&&r,i=!0,s=a||0,a=0,o=l.length,t=!0;l&&o>s;s++)if(l[s].apply(r[0],r[1])===!1&&e.stopOnFalse){n=!1;break}t=!1,l&&(c?c.length&&u(c.shift()):n?l=[]:d.disable())},d={add:function(){if(l){var i=l.length;!function t(n){oe.each(n,function(n,i){var o=oe.type(i);"function"===o?e.unique&&d.has(i)||l.push(i):i&&i.length&&"string"!==o&&t(i)})}(arguments),t?o=l.length:n&&(a=i,u(n))}return this},remove:function(){return l&&oe.each(arguments,function(e,n){for(var i;(i=oe.inArray(n,l,i))>-1;)l.splice(i,1),t&&(o>=i&&o--,s>=i&&s--)}),this},has:function(e){return e?oe.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=c=n=void 0,this},disabled:function(){return!l},lock:function(){return c=void 0,n||d.disable(),this},locked:function(){return!c},fireWith:function(e,n){return!l||i&&!c||(n=n||[],n=[e,n.slice?n.slice():n],t?c.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},oe.extend({Deferred:function(e){var t=[["resolve","done",oe.Callbacks("once memory"),"resolved"],["reject","fail",oe.Callbacks("once memory"),"rejected"],["notify","progress",oe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return oe.Deferred(function(n){oe.each(t,function(t,r){var s=oe.isFunction(e[t])&&e[t];o[r[1]](function(){var e=s&&s.apply(this,arguments);e&&oe.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[r[0]+"With"](this===i?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?oe.extend(e,i):i}},o={};return i.pipe=i.then,oe.each(t,function(e,r){var s=r[2],a=r[3];i[r[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),o[r[0]]=function(){return o[r[0]+"With"](this===o?i:this,arguments),this},o[r[0]+"With"]=s.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,i,o=0,r=V.call(arguments),s=r.length,a=1!==s||e&&oe.isFunction(e.promise)?s:0,l=1===a?e:oe.Deferred(),c=function(e,n,i){return function(o){n[e]=this,i[e]=arguments.length>1?V.call(arguments):o,i===t?l.notifyWith(n,i):--a||l.resolveWith(n,i)}};if(s>1)for(t=new Array(s),n=new Array(s),i=new Array(s);s>o;o++)r[o]&&oe.isFunction(r[o].promise)?r[o].promise().done(c(o,i,r)).fail(l.reject).progress(c(o,n,t)):--a;return a||l.resolveWith(i,r),l.promise()}});var xe;oe.fn.ready=function(e){return oe.ready.promise().done(e),this},oe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?oe.readyWait++:oe.ready(!0)},ready:function(e){if(e===!0?!--oe.readyWait:!oe.isReady){if(!he.body)return setTimeout(oe.ready);oe.isReady=!0,e!==!0&&--oe.readyWait>0||(xe.resolveWith(he,[oe]),oe.fn.triggerHandler&&(oe(he).triggerHandler("ready"),oe(he).off("ready")))}}}),oe.ready.promise=function(t){if(!xe)if(xe=oe.Deferred(),"complete"===he.readyState)setTimeout(oe.ready);else if(he.addEventListener)he.addEventListener("DOMContentLoaded",a,!1),e.addEventListener("load",a,!1);else{he.attachEvent("onreadystatechange",a),e.attachEvent("onload",a);var n=!1;try{n=null==e.frameElement&&he.documentElement}catch(e){}n&&n.doScroll&&!function e(){if(!oe.isReady){try{n.doScroll("left")}catch(t){return setTimeout(e,50)}s(),oe.ready()}}()}return xe.promise(t)};var we,Ce="undefined";for(we in oe(ne))break;ne.ownLast="0"!==we,ne.inlineBlockNeedsLayout=!1,oe(function(){var e,t,n,i;n=he.getElementsByTagName("body")[0],n&&n.style&&(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==Ce&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ne.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=he.createElement("div");if(null==ne.deleteExpando){ne.deleteExpando=!0;try{delete e.test}catch(e){ne.deleteExpando=!1}}e=null}(),oe.acceptData=function(e){var t=oe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)};var Te=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Ee=/([A-Z])/g;oe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?oe.cache[e[oe.expando]]:e[oe.expando],!!e&&!c(e)},data:function(e,t,n){return u(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return u(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),oe.fn.extend({data:function(e,t){var n,i,o,r=this[0],s=r&&r.attributes;if(void 0===e){if(this.length&&(o=oe.data(r),1===r.nodeType&&!oe._data(r,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=oe.camelCase(i.slice(5)),l(r,i,o[i])));oe._data(r,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){oe.data(this,e)}):arguments.length>1?this.each(function(){oe.data(this,e,t)}):r?l(r,e,oe.data(r,e)):void 0},removeData:function(e){return this.each(function(){oe.removeData(this,e)})}}),oe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=oe._data(e,t),n&&(!i||oe.isArray(n)?i=oe._data(e,t,oe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=oe.queue(e,t),i=n.length,o=n.shift(),r=oe._queueHooks(e,t),s=function(){oe.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete r.stop,o.call(e,s,r)),!i&&r&&r.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return oe._data(e,n)||oe._data(e,n,{empty:oe.Callbacks("once memory").add(function(){oe._removeData(e,t+"queue"),oe._removeData(e,n)})})}}),oe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?oe.queue(this[0],e):void 0===t?this:this.each(function(){var n=oe.queue(this,e,t);oe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&oe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){oe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,o=oe.Deferred(),r=this,s=this.length,a=function(){--i||o.resolveWith(r,[r])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)n=oe._data(r[s],e+"queueHooks"),n&&n.empty&&(i++,n.empty.add(a));return a(),o.promise(t)}});var Se=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ke=["Top","Right","Bottom","Left"],Ne=function(e,t){return e=t||e,"none"===oe.css(e,"display")||!oe.contains(e.ownerDocument,e)},De=oe.access=function(e,t,n,i,o,r,s){var a=0,l=e.length,c=null==n;if("object"===oe.type(n)){o=!0;for(a in n)oe.access(e,t,a,n[a],!0,r,s)}else if(void 0!==i&&(o=!0,oe.isFunction(i)||(s=!0),c&&(s?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(oe(e),n)})),t))for(;l>a;a++)t(e[a],n,s?i:i.call(e[a],a,t(e[a],n)));return o?e:c?t.call(e):l?t(e[0],n):r},$e=/^(?:checkbox|radio)$/i;!function(){var e=he.createElement("input"),t=he.createElement("div"),n=he.createDocumentFragment();if(t.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ne.leadingWhitespace=3===t.firstChild.nodeType,ne.tbody=!t.getElementsByTagName("tbody").length,ne.htmlSerialize=!!t.getElementsByTagName("link").length,ne.html5Clone="<:nav></:nav>"!==he.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),ne.appendChecked=e.checked,t.innerHTML="<textarea>x</textarea>",ne.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="<input type='radio' checked='checked' name='t'/>",ne.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,ne.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){ne.noCloneEvent=!1}),t.cloneNode(!0).click()),null==ne.deleteExpando){ne.deleteExpando=!0;try{delete t.test}catch(e){ne.deleteExpando=!1}}}(),function(){var t,n,i=he.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(ne[t+"Bubbles"]=n in e)||(i.setAttribute(n,"t"),ne[t+"Bubbles"]=i.attributes[n].expando===!1);i=null}();var je=/^(?:input|select|textarea)$/i,Le=/^key/,Oe=/^(?:mouse|pointer|contextmenu)|click/,Ie=/^(?:focusinfocus|focusoutblur)$/,Be=/^([^.]*)(?:\.(.+)|)$/;oe.event={global:{},add:function(e,t,n,i,o){var r,s,a,l,c,u,d,f,p,h,g,m=oe._data(e);if(m){for(n.handler&&(l=n,n=l.handler,o=l.selector),n.guid||(n.guid=oe.guid++),(s=m.events)||(s=m.events={}),(u=m.handle)||(u=m.handle=function(e){return typeof oe===Ce||e&&oe.event.triggered===e.type?void 0:oe.event.dispatch.apply(u.elem,arguments)},u.elem=e),t=(t||"").match(be)||[""],a=t.length;a--;)r=Be.exec(t[a])||[],p=g=r[1],h=(r[2]||"").split(".").sort(),p&&(c=oe.event.special[p]||{},p=(o?c.delegateType:c.bindType)||p,c=oe.event.special[p]||{},d=oe.extend({type:p,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&oe.expr.match.needsContext.test(o),namespace:h.join(".")},l),(f=s[p])||(f=s[p]=[],f.delegateCount=0,c.setup&&c.setup.call(e,i,h,u)!==!1||(e.addEventListener?e.addEventListener(p,u,!1):e.attachEvent&&e.attachEvent("on"+p,u))),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,d):f.push(d),oe.event.global[p]=!0);e=null}},remove:function(e,t,n,i,o){var r,s,a,l,c,u,d,f,p,h,g,m=oe.hasData(e)&&oe._data(e);if(m&&(u=m.events)){for(t=(t||"").match(be)||[""],c=t.length;c--;)if(a=Be.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(d=oe.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,f=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=r=f.length;r--;)s=f[r],!o&&g!==s.origType||n&&n.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(f.splice(r,1),s.selector&&f.delegateCount--,d.remove&&d.remove.call(e,s));l&&!f.length&&(d.teardown&&d.teardown.call(e,h,m.handle)!==!1||oe.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)oe.event.remove(e,p+t[c],n,i,!0);oe.isEmptyObject(u)&&(delete m.handle,oe._removeData(e,"events"))}},trigger:function(t,n,i,o){var r,s,a,l,c,u,d,f=[i||he],p=te.call(t,"type")?t.type:t,h=te.call(t,"namespace")?t.namespace.split("."):[];if(a=u=i=i||he,3!==i.nodeType&&8!==i.nodeType&&!Ie.test(p+oe.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),s=p.indexOf(":")<0&&"on"+p,t=t[oe.expando]?t:new oe.Event(p,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=h.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:oe.makeArray(n,[t]),c=oe.event.special[p]||{},o||!c.trigger||c.trigger.apply(i,n)!==!1)){if(!o&&!c.noBubble&&!oe.isWindow(i)){for(l=c.delegateType||p,Ie.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),u=a;u===(i.ownerDocument||he)&&f.push(u.defaultView||u.parentWindow||e)}for(d=0;(a=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:c.bindType||p,r=(oe._data(a,"events")||{})[t.type]&&oe._data(a,"handle"),r&&r.apply(a,n),r=s&&a[s],r&&r.apply&&oe.acceptData(a)&&(t.result=r.apply(a,n),t.result===!1&&t.preventDefault());if(t.type=p,!o&&!t.isDefaultPrevented()&&(!c._default||c._default.apply(f.pop(),n)===!1)&&oe.acceptData(i)&&s&&i[p]&&!oe.isWindow(i)){u=i[s],u&&(i[s]=null),oe.event.triggered=p;try{i[p]()}catch(e){}oe.event.triggered=void 0,u&&(i[s]=u)}return t.result}},dispatch:function(e){e=oe.event.fix(e);var t,n,i,o,r,s=[],a=V.call(arguments),l=(oe._data(this,"events")||{})[e.type]||[],c=oe.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=oe.event.handlers.call(this,e,l),t=0;(o=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(i=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,n=((oe.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,a),void 0!==n&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,o,r,s=[],a=t.delegateCount,l=e.target;if(a&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],r=0;a>r;r++)i=t[r],n=i.selector+" ",void 0===o[n]&&(o[n]=i.needsContext?oe(n,this).index(l)>=0:oe.find(n,this,null,[l]).length),o[n]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},fix:function(e){if(e[oe.expando])return e;var t,n,i,o=e.type,r=e,s=this.fixHooks[o];for(s||(this.fixHooks[o]=s=Oe.test(o)?this.mouseHooks:Le.test(o)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,e=new oe.Event(r),t=i.length;t--;)n=i[t],e[n]=r[n];return e.target||(e.target=r.srcElement||he),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,o,r=t.button,s=t.fromElement;return null==e.pageX&&null!=t.clientX&&(i=e.target.ownerDocument||he,o=i.documentElement,n=i.body,e.pageX=t.clientX+(o&&o.scrollLeft||n&&n.scrollLeft||0)-(o&&o.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||n&&n.scrollTop||0)-(o&&o.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?t.toElement:s),e.which||void 0===r||(e.which=1&r?1:2&r?3:4&r?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==h()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===h()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return oe.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(e){return oe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,i){var o=oe.extend(new oe.Event,n,{type:e,isSimulated:!0,originalEvent:{}});i?oe.event.trigger(o,null,t):oe.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},oe.removeEvent=he.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var i="on"+t;e.detachEvent&&(typeof e[i]===Ce&&(e[i]=null),e.detachEvent(i,n))},oe.Event=function(e,t){return this instanceof oe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?f:p):this.type=e,t&&oe.extend(this,t),this.timeStamp=e&&e.timeStamp||oe.now(),void(this[oe.expando]=!0)):new oe.Event(e,t)},oe.Event.prototype={isDefaultPrevented:p,isPropagationStopped:p,isImmediatePropagationStopped:p,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=f,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=f,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=f,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},oe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){oe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,o=e.relatedTarget,r=e.handleObj;return(!o||o!==i&&!oe.contains(i,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}}),ne.submitBubbles||(oe.event.special.submit={setup:function(){return!oe.nodeName(this,"form")&&void oe.event.add(this,"click._submit keypress._submit",function(e){var t=e.target,n=oe.nodeName(t,"input")||oe.nodeName(t,"button")?t.form:void 0;n&&!oe._data(n,"submitBubbles")&&(oe.event.add(n,"submit._submit",function(e){e._submit_bubble=!0}),oe._data(n,"submitBubbles",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&oe.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return!oe.nodeName(this,"form")&&void oe.event.remove(this,"._submit")}}),ne.changeBubbles||(oe.event.special.change={setup:function(){return je.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(oe.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),oe.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),oe.event.simulate("change",this,e,!0)})),!1):void oe.event.add(this,"beforeactivate._change",function(e){var t=e.target;je.test(t.nodeName)&&!oe._data(t,"changeBubbles")&&(oe.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||oe.event.simulate("change",this.parentNode,e,!0)}),oe._data(t,"changeBubbles",!0))})},handle:function(e){var t=e.target;return this!==t||e.isSimulated||e.isTrigger||"radio"!==t.type&&"checkbox"!==t.type?e.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return oe.event.remove(this,"._change"),!je.test(this.nodeName)}}),ne.focusinBubbles||oe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){oe.event.simulate(t,e.target,oe.event.fix(e),!0)};oe.event.special[t]={setup:function(){var i=this.ownerDocument||this,o=oe._data(i,t);o||i.addEventListener(e,n,!0),oe._data(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=oe._data(i,t)-1;o?oe._data(i,t,o):(i.removeEventListener(e,n,!0),oe._removeData(i,t))}}}),oe.fn.extend({on:function(e,t,n,i,o){var r,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=void 0);for(r in e)this.on(r,t,n,e[r],o);return this}if(null==n&&null==i?(i=t,n=t=void 0):null==i&&("string"==typeof t?(i=n,n=void 0):(i=n,n=t,t=void 0)),i===!1)i=p;else if(!i)return this;return 1===o&&(s=i,i=function(e){return oe().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=oe.guid++)),this.each(function(){oe.event.add(this,e,i,n,t)})},one:function(e,t,n,i){return this.on(e,t,n,i,1)},off:function(e,t,n){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,oe(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=void 0),n===!1&&(n=p),this.each(function(){oe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){oe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?oe.event.trigger(e,t,n,!0):void 0}});var Re="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",He=/ jQuery\d+="(?:null|\d+)"/g,Me=new RegExp("<(?:"+Re+")[\\s/>]","i"),Fe=/^\s+/,Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ze=/<([\w:]+)/,qe=/<tbody/i,_e=/<|&#?\w+;/,We=/<(?:script|style|link)/i,Ue=/checked\s*(?:[^=]|=\s*.checked.)/i,Qe=/^$|\/(?:java|ecma)script/i,Ge=/^true\/(.*)/,Xe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ve={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ne.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Ye=g(he),Ze=Ye.appendChild(he.createElement("div"));Ve.optgroup=Ve.option,Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td,oe.extend({clone:function(e,t,n){var i,o,r,s,a,l=oe.contains(e.ownerDocument,e);if(ne.html5Clone||oe.isXMLDoc(e)||!Me.test("<"+e.nodeName+">")?r=e.cloneNode(!0):(Ze.innerHTML=e.outerHTML,Ze.removeChild(r=Ze.firstChild)),!(ne.noCloneEvent&&ne.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||oe.isXMLDoc(e)))for(i=m(r),a=m(e),s=0;null!=(o=a[s]);++s)i[s]&&C(o,i[s]);if(t)if(n)for(a=a||m(e),i=i||m(r),s=0;null!=(o=a[s]);s++)w(o,i[s]);else w(e,r);return i=m(r,"script"),i.length>0&&x(i,!l&&m(e,"script")),i=a=o=null,r},buildFragment:function(e,t,n,i){for(var o,r,s,a,l,c,u,d=e.length,f=g(t),p=[],h=0;d>h;h++)if(r=e[h],r||0===r)if("object"===oe.type(r))oe.merge(p,r.nodeType?[r]:r);else if(_e.test(r)){for(a=a||f.appendChild(t.createElement("div")),l=(ze.exec(r)||["",""])[1].toLowerCase(),u=Ve[l]||Ve._default,a.innerHTML=u[1]+r.replace(Pe,"<$1></$2>")+u[2],o=u[0];o--;)a=a.lastChild;if(!ne.leadingWhitespace&&Fe.test(r)&&p.push(t.createTextNode(Fe.exec(r)[0])),!ne.tbody)for(r="table"!==l||qe.test(r)?"<table>"!==u[1]||qe.test(r)?0:a:a.firstChild,o=r&&r.childNodes.length;o--;)oe.nodeName(c=r.childNodes[o],"tbody")&&!c.childNodes.length&&r.removeChild(c);for(oe.merge(p,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=f.lastChild}else p.push(t.createTextNode(r));for(a&&f.removeChild(a),
-ne.appendChecked||oe.grep(m(p,"input"),v),h=0;r=p[h++];)if((!i||-1===oe.inArray(r,i))&&(s=oe.contains(r.ownerDocument,r),a=m(f.appendChild(r),"script"),s&&x(a),n))for(o=0;r=a[o++];)Qe.test(r.type||"")&&n.push(r);return a=null,f},cleanData:function(e,t){for(var n,i,o,r,s=0,a=oe.expando,l=oe.cache,c=ne.deleteExpando,u=oe.event.special;null!=(n=e[s]);s++)if((t||oe.acceptData(n))&&(o=n[a],r=o&&l[o])){if(r.events)for(i in r.events)u[i]?oe.event.remove(n,i):oe.removeEvent(n,i,r.handle);l[o]&&(delete l[o],c?delete n[a]:typeof n.removeAttribute!==Ce?n.removeAttribute(a):n[a]=null,X.push(o))}}}),oe.fn.extend({text:function(e){return De(this,function(e){return void 0===e?oe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||he).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?oe.filter(e,this):this,o=0;null!=(n=i[o]);o++)t||1!==n.nodeType||oe.cleanData(m(n)),n.parentNode&&(t&&oe.contains(n.ownerDocument,n)&&x(m(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&oe.cleanData(m(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&oe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return oe.clone(this,e,t)})},html:function(e){return De(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(He,""):void 0;if(!("string"!=typeof e||We.test(e)||!ne.htmlSerialize&&Me.test(e)||!ne.leadingWhitespace&&Fe.test(e)||Ve[(ze.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Pe,"<$1></$2>");try{for(;i>n;n++)t=this[n]||{},1===t.nodeType&&(oe.cleanData(m(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,function(t){e=this.parentNode,oe.cleanData(m(this)),e&&e.replaceChild(t,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=Y.apply([],e);var n,i,o,r,s,a,l=0,c=this.length,u=this,d=c-1,f=e[0],p=oe.isFunction(f);if(p||c>1&&"string"==typeof f&&!ne.checkClone&&Ue.test(f))return this.each(function(n){var i=u.eq(n);p&&(e[0]=f.call(this,n,i.html())),i.domManip(e,t)});if(c&&(a=oe.buildFragment(e,this[0].ownerDocument,!1,this),n=a.firstChild,1===a.childNodes.length&&(a=n),n)){for(r=oe.map(m(a,"script"),b),o=r.length;c>l;l++)i=a,l!==d&&(i=oe.clone(i,!0,!0),o&&oe.merge(r,m(i,"script"))),t.call(this[l],i,l);if(o)for(s=r[r.length-1].ownerDocument,oe.map(r,A),l=0;o>l;l++)i=r[l],Qe.test(i.type||"")&&!oe._data(i,"globalEval")&&oe.contains(s,i)&&(i.src?oe._evalUrl&&oe._evalUrl(i.src):oe.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Xe,"")));a=n=null}return this}}),oe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){oe.fn[e]=function(e){for(var n,i=0,o=[],r=oe(e),s=r.length-1;s>=i;i++)n=i===s?this:this.clone(!0),oe(r[i])[t](n),Z.apply(o,n.get());return this.pushStack(o)}});var Je,Ke={};!function(){var e;ne.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,i;return n=he.getElementsByTagName("body")[0],n&&n.style?(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==Ce&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",t.appendChild(he.createElement("div")).style.width="5px",e=3!==t.offsetWidth),n.removeChild(i),e):void 0}}();var et,tt,nt=/^margin/,it=new RegExp("^("+Se+")(?!px)[a-z%]+$","i"),ot=/^(top|right|bottom|left)$/;e.getComputedStyle?(et=function(t){return t.ownerDocument.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):e.getComputedStyle(t,null)},tt=function(e,t,n){var i,o,r,s,a=e.style;return n=n||et(e),s=n?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==s||oe.contains(e.ownerDocument,e)||(s=oe.style(e,t)),it.test(s)&&nt.test(t)&&(i=a.width,o=a.minWidth,r=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=o,a.maxWidth=r)),void 0===s?s:s+""}):he.documentElement.currentStyle&&(et=function(e){return e.currentStyle},tt=function(e,t,n){var i,o,r,s,a=e.style;return n=n||et(e),s=n?n[t]:void 0,null==s&&a&&a[t]&&(s=a[t]),it.test(s)&&!ot.test(t)&&(i=a.left,o=e.runtimeStyle,r=o&&o.left,r&&(o.left=e.currentStyle.left),a.left="fontSize"===t?"1em":s,s=a.pixelLeft+"px",a.left=i,r&&(o.left=r)),void 0===s?s:s+""||"auto"}),!function(){function t(){var t,n,i,o;n=he.getElementsByTagName("body")[0],n&&n.style&&(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),t.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=s=!1,l=!0,e.getComputedStyle&&(r="1%"!==(e.getComputedStyle(t,null)||{}).top,s="4px"===(e.getComputedStyle(t,null)||{width:"4px"}).width,o=t.appendChild(he.createElement("div")),o.style.cssText=t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",o.style.marginRight=o.style.width="0",t.style.width="1px",l=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight),t.removeChild(o)),t.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=t.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",a=0===o[0].offsetHeight,a&&(o[0].style.display="",o[1].style.display="none",a=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,r,s,a,l;n=he.createElement("div"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",o=n.getElementsByTagName("a")[0],(i=o&&o.style)&&(i.cssText="float:left;opacity:.5",ne.opacity="0.5"===i.opacity,ne.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",ne.clearCloneStyle="content-box"===n.style.backgroundClip,ne.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,oe.extend(ne,{reliableHiddenOffsets:function(){return null==a&&t(),a},boxSizingReliable:function(){return null==s&&t(),s},pixelPosition:function(){return null==r&&t(),r},reliableMarginRight:function(){return null==l&&t(),l}}))}(),oe.swap=function(e,t,n,i){var o,r,s={};for(r in t)s[r]=e.style[r],e.style[r]=t[r];o=n.apply(e,i||[]);for(r in t)e.style[r]=s[r];return o};var rt=/alpha\([^)]*\)/i,st=/opacity\s*=\s*([^)]*)/,at=/^(none|table(?!-c[ea]).+)/,lt=new RegExp("^("+Se+")(.*)$","i"),ct=new RegExp("^([+-])=("+Se+")","i"),ut={position:"absolute",visibility:"hidden",display:"block"},dt={letterSpacing:"0",fontWeight:"400"},ft=["Webkit","O","Moz","ms"];oe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=tt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:ne.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,r,s,a=oe.camelCase(t),l=e.style;if(t=oe.cssProps[a]||(oe.cssProps[a]=k(l,a)),s=oe.cssHooks[t]||oe.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(e,!1,i))?o:l[t];if(r=typeof n,"string"===r&&(o=ct.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(oe.css(e,t)),r="number"),null!=n&&n===n&&("number"!==r||oe.cssNumber[a]||(n+="px"),ne.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),!(s&&"set"in s&&void 0===(n=s.set(e,n,i)))))try{l[t]=n}catch(e){}}},css:function(e,t,n,i){var o,r,s,a=oe.camelCase(t);return t=oe.cssProps[a]||(oe.cssProps[a]=k(e.style,a)),s=oe.cssHooks[t]||oe.cssHooks[a],s&&"get"in s&&(r=s.get(e,!0,n)),void 0===r&&(r=tt(e,t,i)),"normal"===r&&t in dt&&(r=dt[t]),""===n||n?(o=parseFloat(r),n===!0||oe.isNumeric(o)?o||0:r):r}}),oe.each(["height","width"],function(e,t){oe.cssHooks[t]={get:function(e,n,i){return n?at.test(oe.css(e,"display"))&&0===e.offsetWidth?oe.swap(e,ut,function(){return j(e,t,i)}):j(e,t,i):void 0},set:function(e,n,i){var o=i&&et(e);return D(e,n,i?$(e,t,i,ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,o),o):0)}}}),ne.opacity||(oe.cssHooks.opacity={get:function(e,t){return st.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,i=e.currentStyle,o=oe.isNumeric(t)?"alpha(opacity="+100*t+")":"",r=i&&i.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===oe.trim(r.replace(rt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||i&&!i.filter)||(n.filter=rt.test(r)?r.replace(rt,o):r+" "+o)}}),oe.cssHooks.marginRight=S(ne.reliableMarginRight,function(e,t){return t?oe.swap(e,{display:"inline-block"},tt,[e,"marginRight"]):void 0}),oe.each({margin:"",padding:"",border:"Width"},function(e,t){oe.cssHooks[e+t]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[e+ke[i]+t]=r[i]||r[i-2]||r[0];return o}},nt.test(e)||(oe.cssHooks[e+t].set=D)}),oe.fn.extend({css:function(e,t){return De(this,function(e,t,n){var i,o,r={},s=0;if(oe.isArray(t)){for(i=et(e),o=t.length;o>s;s++)r[t[s]]=oe.css(e,t[s],!1,i);return r}return void 0!==n?oe.style(e,t,n):oe.css(e,t)},e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Ne(this)?oe(this).show():oe(this).hide()})}}),oe.Tween=L,L.prototype={constructor:L,init:function(e,t,n,i,o,r){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=r||(oe.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return e&&e.get?e.get(this):L.propHooks._default.get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=oe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=oe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){oe.fx.step[e.prop]?oe.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[oe.cssProps[e.prop]]||oe.cssHooks[e.prop])?oe.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},oe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},oe.fx=L.prototype.init,oe.fx.step={};var pt,ht,gt=/^(?:toggle|show|hide)$/,mt=new RegExp("^(?:([+-])=|)("+Se+")([a-z%]*)$","i"),vt=/queueHooks$/,yt=[R],bt={"*":[function(e,t){var n=this.createTween(e,t),i=n.cur(),o=mt.exec(t),r=o&&o[3]||(oe.cssNumber[e]?"":"px"),s=(oe.cssNumber[e]||"px"!==r&&+i)&&mt.exec(oe.css(n.elem,e)),a=1,l=20;if(s&&s[3]!==r){r=r||s[3],o=o||[],s=+i||1;do a=a||".5",s/=a,oe.style(n.elem,e,s+r);while(a!==(a=n.cur()/i)&&1!==a&&--l)}return o&&(s=n.start=+s||+i||0,n.unit=r,n.end=o[1]?s+(o[1]+1)*o[2]:+o[2]),n}]};oe.Animation=oe.extend(M,{tweener:function(e,t){oe.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,i=0,o=e.length;o>i;i++)n=e[i],bt[n]=bt[n]||[],bt[n].unshift(t)},prefilter:function(e,t){t?yt.unshift(e):yt.push(e)}}),oe.speed=function(e,t,n){var i=e&&"object"==typeof e?oe.extend({},e):{complete:n||!n&&t||oe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!oe.isFunction(t)&&t};return i.duration=oe.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in oe.fx.speeds?oe.fx.speeds[i.duration]:oe.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){oe.isFunction(i.old)&&i.old.call(this),i.queue&&oe.dequeue(this,i.queue)},i},oe.fn.extend({fadeTo:function(e,t,n,i){return this.filter(Ne).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var o=oe.isEmptyObject(e),r=oe.speed(t,n,i),s=function(){var t=M(this,oe.extend({},e),r);(o||oe._data(this,"finish"))&&t.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",r=oe.timers,s=oe._data(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&vt.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=e&&r[o].queue!==e||(r[o].anim.stop(n),t=!1,r.splice(o,1));(t||!n)&&oe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=oe._data(this),i=n[e+"queue"],o=n[e+"queueHooks"],r=oe.timers,s=i?i.length:0;for(n.finish=!0,oe.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=r.length;t--;)r[t].elem===this&&r[t].queue===e&&(r[t].anim.stop(!0),r.splice(t,1));for(t=0;s>t;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish})}}),oe.each(["toggle","show","hide"],function(e,t){var n=oe.fn[t];oe.fn[t]=function(e,i,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,i,o)}}),oe.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){oe.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}}),oe.timers=[],oe.fx.tick=function(){var e,t=oe.timers,n=0;for(pt=oe.now();n<t.length;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||oe.fx.stop(),pt=void 0},oe.fx.timer=function(e){oe.timers.push(e),e()?oe.fx.start():oe.timers.pop()},oe.fx.interval=13,oe.fx.start=function(){ht||(ht=setInterval(oe.fx.tick,oe.fx.interval))},oe.fx.stop=function(){clearInterval(ht),ht=null},oe.fx.speeds={slow:600,fast:200,_default:400},oe.fn.delay=function(e,t){return e=oe.fx?oe.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var i=setTimeout(t,e);n.stop=function(){clearTimeout(i)}})},function(){var e,t,n,i,o;t=he.createElement("div"),t.setAttribute("className","t"),t.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=t.getElementsByTagName("a")[0],n=he.createElement("select"),o=n.appendChild(he.createElement("option")),e=t.getElementsByTagName("input")[0],i.style.cssText="top:1px",ne.getSetAttribute="t"!==t.className,ne.style=/top/.test(i.getAttribute("style")),ne.hrefNormalized="/a"===i.getAttribute("href"),ne.checkOn=!!e.value,ne.optSelected=o.selected,ne.enctype=!!he.createElement("form").enctype,n.disabled=!0,ne.optDisabled=!o.disabled,e=he.createElement("input"),e.setAttribute("value",""),ne.input=""===e.getAttribute("value"),e.value="t",e.setAttribute("type","radio"),ne.radioValue="t"===e.value}();var At=/\r/g;oe.fn.extend({val:function(e){var t,n,i,o=this[0];return arguments.length?(i=oe.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,oe(this).val()):e,null==o?o="":"number"==typeof o?o+="":oe.isArray(o)&&(o=oe.map(o,function(e){return null==e?"":e+""})),t=oe.valHooks[this.type]||oe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))})):o?(t=oe.valHooks[o.type]||oe.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(At,""):null==n?"":n)):void 0}}),oe.extend({valHooks:{option:{get:function(e){var t=oe.find.attr(e,"value");return null!=t?t:oe.trim(oe.text(e))}},select:{get:function(e){for(var t,n,i=e.options,o=e.selectedIndex,r="select-one"===e.type||0>o,s=r?null:[],a=r?o+1:i.length,l=0>o?a:r?o:0;a>l;l++)if(n=i[l],!(!n.selected&&l!==o||(ne.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&oe.nodeName(n.parentNode,"optgroup"))){if(t=oe(n).val(),r)return t;s.push(t)}return s},set:function(e,t){for(var n,i,o=e.options,r=oe.makeArray(t),s=o.length;s--;)if(i=o[s],oe.inArray(oe.valHooks.option.get(i),r)>=0)try{i.selected=n=!0}catch(e){i.scrollHeight}else i.selected=!1;return n||(e.selectedIndex=-1),o}}}}),oe.each(["radio","checkbox"],function(){oe.valHooks[this]={set:function(e,t){return oe.isArray(t)?e.checked=oe.inArray(oe(e).val(),t)>=0:void 0}},ne.checkOn||(oe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var xt,wt,Ct=oe.expr.attrHandle,Tt=/^(?:checked|selected)$/i,Et=ne.getSetAttribute,St=ne.input;oe.fn.extend({attr:function(e,t){return De(this,oe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){oe.removeAttr(this,e)})}}),oe.extend({attr:function(e,t,n){var i,o,r=e.nodeType;if(e&&3!==r&&8!==r&&2!==r)return typeof e.getAttribute===Ce?oe.prop(e,t,n):(1===r&&oe.isXMLDoc(e)||(t=t.toLowerCase(),i=oe.attrHooks[t]||(oe.expr.match.bool.test(t)?wt:xt)),void 0===n?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=oe.find.attr(e,t),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void oe.removeAttr(e,t))},removeAttr:function(e,t){var n,i,o=0,r=t&&t.match(be);if(r&&1===e.nodeType)for(;n=r[o++];)i=oe.propFix[n]||n,oe.expr.match.bool.test(n)?St&&Et||!Tt.test(n)?e[i]=!1:e[oe.camelCase("default-"+n)]=e[i]=!1:oe.attr(e,n,""),e.removeAttribute(Et?n:i)},attrHooks:{type:{set:function(e,t){if(!ne.radioValue&&"radio"===t&&oe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),wt={set:function(e,t,n){return t===!1?oe.removeAttr(e,n):St&&Et||!Tt.test(n)?e.setAttribute(!Et&&oe.propFix[n]||n,n):e[oe.camelCase("default-"+n)]=e[n]=!0,n}},oe.each(oe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=Ct[t]||oe.find.attr;Ct[t]=St&&Et||!Tt.test(t)?function(e,t,i){var o,r;return i||(r=Ct[t],Ct[t]=o,o=null!=n(e,t,i)?t.toLowerCase():null,Ct[t]=r),o}:function(e,t,n){return n?void 0:e[oe.camelCase("default-"+t)]?t.toLowerCase():null}}),St&&Et||(oe.attrHooks.value={set:function(e,t,n){return oe.nodeName(e,"input")?void(e.defaultValue=t):xt&&xt.set(e,t,n)}}),Et||(xt={set:function(e,t,n){var i=e.getAttributeNode(n);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(n)),i.value=t+="","value"===n||t===e.getAttribute(n)?t:void 0}},Ct.id=Ct.name=Ct.coords=function(e,t,n){var i;return n?void 0:(i=e.getAttributeNode(t))&&""!==i.value?i.value:null},oe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:void 0},set:xt.set},oe.attrHooks.contenteditable={set:function(e,t,n){xt.set(e,""!==t&&t,n)}},oe.each(["width","height"],function(e,t){oe.attrHooks[t]={set:function(e,n){return""===n?(e.setAttribute(t,"auto"),n):void 0}}})),ne.style||(oe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var kt=/^(?:input|select|textarea|button|object)$/i,Nt=/^(?:a|area)$/i;oe.fn.extend({prop:function(e,t){return De(this,oe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=oe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(e){}})}}),oe.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var i,o,r,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return r=1!==s||!oe.isXMLDoc(e),r&&(t=oe.propFix[t]||t,o=oe.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=oe.find.attr(e,"tabindex");return t?parseInt(t,10):kt.test(e.nodeName)||Nt.test(e.nodeName)&&e.href?0:-1}}}}),ne.hrefNormalized||oe.each(["href","src"],function(e,t){oe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),ne.optSelected||(oe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),oe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){oe.propFix[this.toLowerCase()]=this}),ne.enctype||(oe.propFix.enctype="encoding");var Dt=/[\t\r\n\f]/g;oe.fn.extend({addClass:function(e){var t,n,i,o,r,s,a=0,l=this.length,c="string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).addClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(be)||[];l>a;a++)if(n=this[a],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Dt," "):" ")){for(r=0;o=t[r++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");s=oe.trim(i),n.className!==s&&(n.className=s)}return this},removeClass:function(e){var t,n,i,o,r,s,a=0,l=this.length,c=0===arguments.length||"string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).removeClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(be)||[];l>a;a++)if(n=this[a],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Dt," "):"")){for(r=0;o=t[r++];)for(;i.indexOf(" "+o+" ")>=0;)i=i.replace(" "+o+" "," ");s=e?oe.trim(i):"",n.className!==s&&(n.className=s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(oe.isFunction(e)?function(n){oe(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,i=0,o=oe(this),r=e.match(be)||[];t=r[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===Ce||"boolean"===n)&&(this.className&&oe._data(this,"__className__",this.className),this.className=this.className||e===!1?"":oe._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,i=this.length;i>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Dt," ").indexOf(t)>=0)return!0;return!1}}),oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){oe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),oe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var $t=oe.now(),jt=/\?/,Lt=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;oe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,i=null,o=oe.trim(t+"");return o&&!oe.trim(o.replace(Lt,function(e,t,o,r){return n&&t&&(i=0),0===i?e:(n=o||t,i+=!r-!o,"")}))?Function("return "+o)():oe.error("Invalid JSON: "+t)},oe.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(i=new DOMParser,n=i.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(e){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||oe.error("Invalid XML: "+t),n};var Ot,It,Bt=/#.*$/,Rt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Mt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Pt=/^\/\//,zt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,qt={},_t={},Wt="*/".concat("*");try{It=location.href}catch(e){It=he.createElement("a"),It.href="",It=It.href}Ot=zt.exec(It.toLowerCase())||[],oe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:It,type:"GET",isLocal:Mt.test(Ot[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Wt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":oe.parseJSON,"text xml":oe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?z(z(e,oe.ajaxSettings),t):z(oe.ajaxSettings,e)},ajaxPrefilter:F(qt),ajaxTransport:F(_t),ajax:function(e,t){function n(e,t,n,i){var o,u,v,y,A,w=t;2!==b&&(b=2,a&&clearTimeout(a),c=void 0,s=i||"",x.readyState=e>0?4:0,o=e>=200&&300>e||304===e,n&&(y=q(d,x,n)),y=_(d,y,x,o),o?(d.ifModified&&(A=x.getResponseHeader("Last-Modified"),A&&(oe.lastModified[r]=A),A=x.getResponseHeader("etag"),A&&(oe.etag[r]=A)),204===e||"HEAD"===d.type?w="nocontent":304===e?w="notmodified":(w=y.state,u=y.data,v=y.error,o=!v)):(v=w,(e||!w)&&(w="error",0>e&&(e=0))),x.status=e,x.statusText=(t||w)+"",o?h.resolveWith(f,[u,w,x]):h.rejectWith(f,[x,w,v]),x.statusCode(m),m=void 0,l&&p.trigger(o?"ajaxSuccess":"ajaxError",[x,d,o?u:v]),g.fireWith(f,[x,w]),l&&(p.trigger("ajaxComplete",[x,d]),--oe.active||oe.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,r,s,a,l,c,u,d=oe.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?oe(f):oe.event,h=oe.Deferred(),g=oe.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,A="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!u)for(u={};t=Ht.exec(s);)u[t[1].toLowerCase()]=t[2];t=u[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||A;return c&&c.abort(t),n(0,t),this}};if(h.promise(x).complete=g.add,x.success=x.done,x.error=x.fail,d.url=((e||d.url||It)+"").replace(Bt,"").replace(Pt,Ot[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=oe.trim(d.dataType||"*").toLowerCase().match(be)||[""],null==d.crossDomain&&(i=zt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===Ot[1]&&i[2]===Ot[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(Ot[3]||("http:"===Ot[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=oe.param(d.data,d.traditional)),P(qt,d,t,x),2===b)return x;l=oe.event&&d.global,l&&0===oe.active++&&oe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(jt.test(r)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Rt.test(r)?r.replace(Rt,"$1_="+$t++):r+(jt.test(r)?"&":"?")+"_="+$t++)),d.ifModified&&(oe.lastModified[r]&&x.setRequestHeader("If-Modified-Since",oe.lastModified[r]),oe.etag[r]&&x.setRequestHeader("If-None-Match",oe.etag[r])),(d.data&&d.hasContent&&d.contentType!==!1||t.contentType)&&x.setRequestHeader("Content-Type",d.contentType),x.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Wt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)x.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(f,x,d)===!1||2===b))return x.abort();A="abort";for(o in{success:1,error:1,complete:1})x[o](d[o]);if(c=P(_t,d,t,x)){x.readyState=1,l&&p.trigger("ajaxSend",[x,d]),d.async&&d.timeout>0&&(a=setTimeout(function(){x.abort("timeout")},d.timeout));try{b=1,c.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return x},getJSON:function(e,t,n){return oe.get(e,t,n,"json")},getScript:function(e,t){return oe.get(e,void 0,t,"script")}}),oe.each(["get","post"],function(e,t){oe[t]=function(e,n,i,o){return oe.isFunction(n)&&(o=o||i,i=n,n=void 0),oe.ajax({url:e,type:t,dataType:o,data:n,success:i})}}),oe._evalUrl=function(e){return oe.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},oe.fn.extend({wrapAll:function(e){if(oe.isFunction(e))return this.each(function(t){oe(this).wrapAll(e.call(this,t))});if(this[0]){var t=oe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return this.each(oe.isFunction(e)?function(t){oe(this).wrapInner(e.call(this,t))}:function(){var t=oe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=oe.isFunction(e);return this.each(function(n){oe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){oe.nodeName(this,"body")||oe(this).replaceWith(this.childNodes)}).end()}}),oe.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!ne.reliableHiddenOffsets()&&"none"===(e.style&&e.style.display||oe.css(e,"display"))},oe.expr.filters.visible=function(e){return!oe.expr.filters.hidden(e)};var Ut=/%20/g,Qt=/\[\]$/,Gt=/\r?\n/g,Xt=/^(?:submit|button|image|reset|file)$/i,Vt=/^(?:input|select|textarea|keygen)/i;oe.param=function(e,t){var n,i=[],o=function(e,t){t=oe.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=oe.ajaxSettings&&oe.ajaxSettings.traditional),oe.isArray(e)||e.jquery&&!oe.isPlainObject(e))oe.each(e,function(){o(this.name,this.value)});else for(n in e)W(n,e[n],t,o);return i.join("&").replace(Ut,"+")},oe.fn.extend({serialize:function(){return oe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=oe.prop(this,"elements");return e?oe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!oe(this).is(":disabled")&&Vt.test(this.nodeName)&&!Xt.test(e)&&(this.checked||!$e.test(e))}).map(function(e,t){var n=oe(this).val();return null==n?null:oe.isArray(n)?oe.map(n,function(e){return{name:t.name,value:e.replace(Gt,"\r\n")}}):{name:t.name,value:n.replace(Gt,"\r\n")}}).get()}}),oe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||Q()}:U;var Yt=0,Zt={},Jt=oe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in Zt)Zt[e](void 0,!0)}),ne.cors=!!Jt&&"withCredentials"in Jt,Jt=ne.ajax=!!Jt,Jt&&oe.ajaxTransport(function(e){if(!e.crossDomain||ne.cors){var t;return{send:function(n,i){var o,r=e.xhr(),s=++Yt;if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)r[o]=e.xhrFields[o];e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&r.setRequestHeader(o,n[o]+"");r.send(e.hasContent&&e.data||null),t=function(n,o){var a,l,c;if(t&&(o||4===r.readyState))if(delete Zt[s],t=void 0,r.onreadystatechange=oe.noop,o)4!==r.readyState&&r.abort();else{c={},a=r.status,"string"==typeof r.responseText&&(c.text=r.responseText);try{l=r.statusText}catch(e){l=""}a||!e.isLocal||e.crossDomain?1223===a&&(a=204):a=c.text?200:404}c&&i(a,l,c,r.getAllResponseHeaders())},e.async?4===r.readyState?setTimeout(t):r.onreadystatechange=Zt[s]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),oe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/
-},converters:{"text script":function(e){return oe.globalEval(e),e}}}),oe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),oe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=he.head||oe("head")[0]||he.documentElement;return{send:function(i,o){t=he.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var Kt=[],en=/(=)\?(?=&|$)|\?\?/;oe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||oe.expando+"_"+$t++;return this[e]=!0,e}}),oe.ajaxPrefilter("json jsonp",function(t,n,i){var o,r,s,a=t.jsonp!==!1&&(en.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&en.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(o=t.jsonpCallback=oe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(en,"$1"+o):t.jsonp!==!1&&(t.url+=(jt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return s||oe.error(o+" was not called"),s[0]},t.dataTypes[0]="json",r=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=r,t[o]&&(t.jsonpCallback=n.jsonpCallback,Kt.push(o)),s&&oe.isFunction(r)&&r(s[0]),s=r=void 0}),"script"):void 0}),oe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||he;var i=de.exec(e),o=!n&&[];return i?[t.createElement(i[1])]:(i=oe.buildFragment([e],t,o),o&&o.length&&oe(o).remove(),oe.merge([],i.childNodes))};var tn=oe.fn.load;oe.fn.load=function(e,t,n){if("string"!=typeof e&&tn)return tn.apply(this,arguments);var i,o,r,s=this,a=e.indexOf(" ");return a>=0&&(i=oe.trim(e.slice(a,e.length)),e=e.slice(0,a)),oe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),s.length>0&&oe.ajax({url:e,type:r,dataType:"html",data:t}).done(function(e){o=arguments,s.html(i?oe("<div>").append(oe.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},oe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){oe.fn[t]=function(e){return this.on(t,e)}}),oe.expr.filters.animated=function(e){return oe.grep(oe.timers,function(t){return e===t.elem}).length};var nn=e.document.documentElement;oe.offset={setOffset:function(e,t,n){var i,o,r,s,a,l,c,u=oe.css(e,"position"),d=oe(e),f={};"static"===u&&(e.style.position="relative"),a=d.offset(),r=oe.css(e,"top"),l=oe.css(e,"left"),c=("absolute"===u||"fixed"===u)&&oe.inArray("auto",[r,l])>-1,c?(i=d.position(),s=i.top,o=i.left):(s=parseFloat(r)||0,o=parseFloat(l)||0),oe.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+o),"using"in t?t.using.call(e,f):d.css(f)}},oe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){oe.offset.setOffset(this,e,t)});var t,n,i={top:0,left:0},o=this[0],r=o&&o.ownerDocument;return r?(t=r.documentElement,oe.contains(t,o)?(typeof o.getBoundingClientRect!==Ce&&(i=o.getBoundingClientRect()),n=G(r),{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var e,t,n={top:0,left:0},i=this[0];return"fixed"===oe.css(i,"position")?t=i.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),oe.nodeName(e[0],"html")||(n=e.offset()),n.top+=oe.css(e[0],"borderTopWidth",!0),n.left+=oe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-oe.css(i,"marginTop",!0),left:t.left-n.left-oe.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||nn;e&&!oe.nodeName(e,"html")&&"static"===oe.css(e,"position");)e=e.offsetParent;return e||nn})}}),oe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);oe.fn[e]=function(i){return De(this,function(e,i,o){var r=G(e);return void 0===o?r?t in r?r[t]:r.document.documentElement[i]:e[i]:void(r?r.scrollTo(n?oe(r).scrollLeft():o,n?o:oe(r).scrollTop()):e[i]=o)},e,i,arguments.length,null)}}),oe.each(["top","left"],function(e,t){oe.cssHooks[t]=S(ne.pixelPosition,function(e,n){return n?(n=tt(e,t),it.test(n)?oe(e).position()[t]+"px":n):void 0})}),oe.each({Height:"height",Width:"width"},function(e,t){oe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){oe.fn[i]=function(i,o){var r=arguments.length&&(n||"boolean"!=typeof i),s=n||(i===!0||o===!0?"margin":"border");return De(this,function(t,n,i){var o;return oe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?oe.css(t,n,s):oe.style(t,n,i,s)},t,r?i:void 0,r,null)}})}),oe.fn.size=function(){return this.length},oe.fn.andSelf=oe.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return oe});var on=e.jQuery,rn=e.$;return oe.noConflict=function(t){return e.$===oe&&(e.$=rn),t&&e.jQuery===oe&&(e.jQuery=on),oe},typeof t===Ce&&(e.jQuery=e.$=oe),oe}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(e){"use strict";var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(e){"use strict";function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}e.fn.emulateTransitionEnd=function(t){var n=!1,i=this;e(this).one("bsTransitionEnd",function(){n=!0});var o=function(){n||e(i).trigger(e.support.transition.end)};return setTimeout(o,t),this},e(function(){e.support.transition=t(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){return e(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var n=e(this),o=n.data("bs.alert");o||n.data("bs.alert",o=new i(this)),"string"==typeof t&&o[t].call(n)})}var n='[data-dismiss="alert"]',i=function(t){e(t).on("click",n,this.close)};i.VERSION="3.3.5",i.TRANSITION_DURATION=150,i.prototype.close=function(t){function n(){s.detach().trigger("closed.bs.alert").remove()}var o=e(this),r=o.attr("data-target");r||(r=o.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var s=e(r);t&&t.preventDefault(),s.length||(s=o.closest(".alert")),s.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(s.removeClass("in"),e.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var o=e.fn.alert;e.fn.alert=t,e.fn.alert.Constructor=i,e.fn.alert.noConflict=function(){return e.fn.alert=o,this},e(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.button"),r="object"==typeof t&&t;o||i.data("bs.button",o=new n(this,r)),"toggle"==t?o.toggle():t&&o.setState(t)})}var n=function(t,i){this.$element=e(t),this.options=e.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.5",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();t+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(e.proxy(function(){i[o](null==r[t]?this.options[t]:r[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=e.fn.button;e.fn.button=t,e.fn.button.Constructor=n,e.fn.button.noConflict=function(){return e.fn.button=i,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=e(n.target);i.hasClass("btn")||(i=i.closest(".btn")),t.call(i,"toggle"),e(n.target).is('input[type="radio"]')||e(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.carousel"),r=e.extend({},n.DEFAULTS,i.data(),"object"==typeof t&&t),s="string"==typeof t?t:r.slide;o||i.data("bs.carousel",o=new n(this,r)),"number"==typeof t?o.to(t):s?o[s]():r.interval&&o.pause().cycle()})}var n=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},n.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},n.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t),i="prev"==e&&0===n||"next"==e&&n==this.$items.length-1;if(i&&!this.options.wrap)return t;var o="prev"==e?-1:1,r=(n+o)%this.$items.length;return this.$items.eq(r)},n.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){t.to(e)}):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},n.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){return this.sliding?void 0:this.slide("next")},n.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},n.prototype.slide=function(t,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(t,o),s=this.interval,a="next"==t?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=e.Event("slide.bs.carousel",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=e(this.$indicators.children()[this.getItemIndex(r)]);d&&d.addClass("active")}var f=e.Event("slid.bs.carousel",{relatedTarget:c,direction:a});return e.support.transition&&this.$element.hasClass("slide")?(r.addClass(t),r[0].offsetWidth,o.addClass(a),r.addClass(a),o.one("bsTransitionEnd",function(){r.removeClass([t,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(f)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(f)),s&&this.cycle(),this}};var i=e.fn.carousel;e.fn.carousel=t,e.fn.carousel.Constructor=n,e.fn.carousel.noConflict=function(){return e.fn.carousel=i,this};var o=function(n){var i,o=e(this),r=e(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var s=e.extend({},r.data(),o.data()),a=o.attr("data-slide-to");a&&(s.interval=!1),t.call(r,s),a&&r.data("bs.carousel").to(a),n.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var n=e(this);t.call(n,n.data())})})}(jQuery),+function(e){"use strict";function t(t){var n,i=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(i)}function n(t){return this.each(function(){var n=e(this),o=n.data("bs.collapse"),r=e.extend({},i.DEFAULTS,n.data(),"object"==typeof t&&t);!o&&r.toggle&&/show|hide/.test(t)&&(r.toggle=!1),o||n.data("bs.collapse",o=new i(this,r)),"string"==typeof t&&o[t]()})}var i=function(t,n){this.$element=e(t),this.options=e.extend({},i.DEFAULTS,n),this.$trigger=e('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.5",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var e=this.$element.hasClass("width");return e?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(t=o.data("bs.collapse"),t&&t.transitioning))){var r=e.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(n.call(o,"hide"),t||o.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return a.call(this);var l=e.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",e.proxy(a,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=e.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return e.support.transition?void this.$element[n](0).one("bsTransitionEnd",e.proxy(o,this)).emulateTransitionEnd(i.TRANSITION_DURATION):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return e(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy(function(n,i){var o=e(i);this.addAriaAndCollapsedClass(t(o),o)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=e.fn.collapse;e.fn.collapse=n,e.fn.collapse.Constructor=i,e.fn.collapse.noConflict=function(){return e.fn.collapse=o,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var o=e(this);o.attr("data-target")||i.preventDefault();var r=t(o),s=r.data("bs.collapse"),a=s?"toggle":o.data();n.call(r,a)})}(jQuery),+function(e){"use strict";function t(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&e(n);return i&&i.length?i:t.parent()}function n(n){n&&3===n.which||(e(o).remove(),e(r).each(function(){var i=e(this),o=t(i),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(o[0],n.target)||(o.trigger(n=e.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),o.removeClass("open").trigger("hidden.bs.dropdown",r))))}))}function i(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new s(this)),"string"==typeof t&&i[t].call(n)})}var o=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(t){e(t).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.5",s.prototype.toggle=function(i){var o=e(this);if(!o.is(".disabled, :disabled")){var r=t(o),s=r.hasClass("open");if(n(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",n);var a={relatedTarget:this};if(r.trigger(i=e.Event("show.bs.dropdown",a)),i.isDefaultPrevented())return;o.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},s.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=e(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var o=t(i),s=o.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&o.find(r).trigger("focus"),i.trigger("click");var a=" li:not(.disabled):visible a",l=o.find(".dropdown-menu"+a);if(l.length){var c=l.index(n.target);38==n.which&&c>0&&c--,40==n.which&&c<l.length-1&&c++,~c||(c=0),l.eq(c).trigger("focus")}}}};var a=e.fn.dropdown;e.fn.dropdown=i,e.fn.dropdown.Constructor=s,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=a,this},e(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",s.prototype.keydown)}(jQuery),+function(e){"use strict";function t(t,i){return this.each(function(){var o=e(this),r=o.data("bs.modal"),s=e.extend({},n.DEFAULTS,o.data(),"object"==typeof t&&t);r||o.data("bs.modal",r=new n(this,s)),"string"==typeof t?r[t](i):s.show&&r.show(i)})}var n=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},n.prototype.show=function(t){var i=this,o=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(t){e(t.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var o=e.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),o&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t});o?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},n.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",e.proxy(function(e){27==e.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(t){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=e.support.transition&&o;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+o).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy(function(e){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;r?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),t&&t()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):s()}else t&&t()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",e+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var i=e.fn.modal;e.fn.modal=t,e.fn.modal.Constructor=n,e.fn.modal.noConflict=function(){return e.fn.modal=i,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=e(this),o=i.attr("href"),r=e(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),s=r.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(o)&&o},r.data(),i.data());i.is("a")&&n.preventDefault(),r.one("show.bs.modal",function(e){e.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),t.call(r,s,this)})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tooltip"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.tooltip",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(t,n,i){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var s=o[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},n.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,i){n[e]!=i&&(t[e]=i)}),t},n.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},n.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),n.isInStateTrue()?void 0:(clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide())},n.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var i=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!i)return;var o=this,r=this.tip(),s=this.getUID(this.type);this.setContent(),r.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(a);c&&(a=a.replace(l,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=r[0].offsetWidth,f=r[0].offsetHeight;if(c){var p=a,h=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+f>h.bottom?"top":"top"==a&&u.top-f<h.top?"bottom":"right"==a&&u.right+d>h.width?"left":"left"==a&&u.left-d<h.left?"right":a,r.removeClass(p).addClass(a)}var g=this.getCalculatedOffset(a,u,d,f);this.applyPlacement(g,a);var m=function(){var e=o.hoverState;o.$element.trigger("shown.bs."+o.type),o.hoverState=null,"out"==e&&o.leave(o)};e.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(n.TRANSITION_DURATION):m()}},n.prototype.applyPlacement=function(t,n){var i=this.tip(),o=i[0].offsetWidth,r=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,e.offset.setOffset(i[0],e.extend({using:function(e){i.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=r&&(t.top=t.top+r-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-o+l:2*u.top-r+c,p=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(f,i[0][p],d)},n.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},n.prototype.hide=function(t){function i(){"in"!=o.hoverState&&r.detach(),o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),t&&t()}var o=this,r=e(this.$tip),s=e.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i(),this.hoverState=null,this)},n.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(t){t=t||this.$element;var n=t[0],i="BODY"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var r=i?{top:0,left:0}:t.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},a=i?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,s,a,r)},n.prototype.getCalculatedOffset=function(e,t,n,i){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-i,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-i/2,left:t.left-n}:{top:t.top+t.height/2-i/2,left:t.left+t.width}},n.prototype.getViewportAdjustedDelta=function(e,t,n,i){
-var o={top:0,left:0};if(!this.$viewport)return o;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(e)){var a=t.top-r-s.scroll,l=t.top+r-s.scroll+i;a<s.top?o.top=s.top-a:l>s.top+s.height&&(o.top=s.top+s.height-l)}else{var c=t.left-r,u=t.left+r+n;c<s.left?o.left=s.left-c:u>s.right&&(o.left=s.left+s.width-u)}return o},n.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||("function"==typeof n.title?n.title.call(t[0]):n.title)},n.prototype.getUID=function(e){do e+=~~(1e6*Math.random());while(document.getElementById(e));return e},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(t){var n=this;t&&(n=e(t.currentTarget).data("bs."+this.type),n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null})};var i=e.fn.tooltip;e.fn.tooltip=t,e.fn.tooltip.Constructor=n,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=i,this}}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.popover"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.popover",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.5",n.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),n.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=e.fn.popover;e.fn.popover=t,e.fn.popover.Constructor=n,e.fn.popover.noConflict=function(){return e.fn.popover=i,this}}(jQuery),+function(e){"use strict";function t(n,i){this.$body=e(document.body),this.$scrollElement=e(e(n).is(document.body)?window:n),this.options=e.extend({},t.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=e(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new t(this,r)),"string"==typeof n&&o[n]()})}t.VERSION="3.3.5",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=e(this),o=t.data("target")||t.attr("href"),r=/^#./.test(o)&&e(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=i)return s!=(e=r[r.length-1])&&this.activate(e);if(s&&t<o[0])return this.activeTarget=null,this.clear();for(e=o.length;e--;)s!=r[e]&&t>=o[e]&&(void 0===o[e+1]||t<o[e+1])&&this.activate(r[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=e(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=i,this},e(window).on("load.bs.scrollspy.data-api",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tab");o||i.data("bs.tab",o=new n(this)),"string"==typeof t&&o[t]()})}var n=function(t){this.element=e(t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=t.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=n.find(".active:last a"),r=e.Event("hide.bs.tab",{relatedTarget:t[0]}),s=e.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(r),t.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var a=e(i);this.activate(t.closest("li"),n),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},n.prototype.activate=function(t,i,o){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}var s=i.find("> .active"),a=o&&e.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&a?s.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),s.removeClass("in")};var i=e.fn.tab;e.fn.tab=t,e.fn.tab.Constructor=n,e.fn.tab.noConflict=function(){return e.fn.tab=i,this};var o=function(n){n.preventDefault(),t.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.affix"),r="object"==typeof t&&t;o||i.data("bs.affix",o=new n(this,r)),"string"==typeof t&&o[t]()})}var n=function(t,i){this.options=e.extend({},n.DEFAULTS,i),this.$target=e(this.options.target).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.5",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(e,t,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return n>o&&"top";if("bottom"==this.affixed)return null!=n?!(o+this.unpin<=r.top)&&"bottom":!(e-i>=o+s)&&"bottom";var a=null==this.affixed,l=a?o:r.top,c=a?s:t;return null!=n&&n>=o?"top":null!=i&&l+c>=e-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var e=this.$target.scrollTop(),t=this.$element.offset();return this.pinnedOffset=t.top-e},n.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,s=Math.max(e(document).height(),e(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,t,o,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-t-r})}};var i=e.fn.affix;e.fn.affix=t,e.fn.affix.Constructor=n,e.fn.affix.noConflict=function(){return e.fn.affix=i,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var n=e(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),t.call(n,i)})})}(jQuery),!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){(function(t){function i(e,t,n,i){var s=o(n.substr(n.lastIndexOf(e.domain)),e);s&&r({mode:null,el:i,flags:s,engineSettings:t})}function o(e,t){for(var n={theme:T(R.settings.themes.gray,null),stylesheets:t.stylesheets,holderURL:[]},i=!1,o=String.fromCharCode(11),r=e.replace(/([^\\])\//g,"$1"+o).split(o),s=/%[0-9a-f]{2}/gi,a=r.length,l=0;a>l;l++){var c=r[l];if(c.match(s))try{c=decodeURIComponent(c)}catch(e){c=r[l]}var u=!1;if(R.flags.dimensions.match(c))i=!0,n.dimensions=R.flags.dimensions.output(c),u=!0;else if(R.flags.fluid.match(c))i=!0,n.dimensions=R.flags.fluid.output(c),n.fluid=!0,u=!0;else if(R.flags.textmode.match(c))n.textmode=R.flags.textmode.output(c),u=!0;else if(R.flags.colors.match(c)){var d=R.flags.colors.output(c);n.theme=T(n.theme,d),u=!0}else if(t.themes[c])t.themes.hasOwnProperty(c)&&(n.theme=T(t.themes[c],null)),u=!0;else if(R.flags.font.match(c))n.font=R.flags.font.output(c),u=!0;else if(R.flags.auto.match(c))n.auto=!0,u=!0;else if(R.flags.text.match(c))n.text=R.flags.text.output(c),u=!0;else if(R.flags.size.match(c))n.size=R.flags.size.output(c),u=!0;else if(R.flags.random.match(c)){null==R.vars.cache.themeKeys&&(R.vars.cache.themeKeys=Object.keys(t.themes));var f=R.vars.cache.themeKeys[0|Math.random()*R.vars.cache.themeKeys.length];n.theme=T(t.themes[f],null),u=!0}u&&n.holderURL.push(c)}return n.holderURL.unshift(t.domain),n.holderURL=n.holderURL.join("/"),!!i&&n}function r(e){var t=e.mode,n=e.el,i=e.flags,o=e.engineSettings,r=i.dimensions,a=i.theme,l=r.width+"x"+r.height;if(t=null==t?i.fluid?"fluid":"image":t,null!=i.text&&(a.text=i.text,"object"===n.nodeName.toLowerCase())){for(var d=a.text.split("\\n"),f=0;f<d.length;f++)d[f]=S(d[f]);a.text=d.join("\\n")}var p=i.holderURL,h=T(o,null);if(i.font&&(a.font=i.font,!h.noFontFallback&&"img"===n.nodeName.toLowerCase()&&R.setup.supportsCanvas&&"svg"===h.renderer&&(h=T(h,{renderer:"canvas"}))),i.font&&"canvas"==h.renderer&&(h.reRender=!0),"background"==t)null==n.getAttribute("data-background-src")&&g(n,{"data-background-src":p});else{var m={};m[R.vars.dataAttr]=p,g(n,m)}i.theme=a,n.holderData={flags:i,engineSettings:h},("image"==t||"fluid"==t)&&g(n,{alt:a.text?a.text+" ["+l+"]":l});var v={mode:t,el:n,holderSettings:{dimensions:r,theme:a,flags:i},engineSettings:h};"image"==t?("html"!=h.renderer&&i.auto||(n.style.width=r.width+"px",n.style.height=r.height+"px"),"html"==h.renderer?n.style.backgroundColor=a.background:(s(v),"exact"==i.textmode&&(n.holderData.resizeUpdate=!0,R.vars.resizableImages.push(n),c(n)))):"background"==t&&"html"!=h.renderer?s(v):"fluid"==t&&(n.holderData.resizeUpdate=!0,"%"==r.height.slice(-1)?n.style.height=r.height:null!=i.auto&&i.auto||(n.style.height=r.height+"px"),"%"==r.width.slice(-1)?n.style.width=r.width:null!=i.auto&&i.auto||(n.style.width=r.width+"px"),("inline"==n.style.display||""===n.style.display||"none"==n.style.display)&&(n.style.display="block"),u(n),"html"==h.renderer?n.style.backgroundColor=a.background:(R.vars.resizableImages.push(n),c(n)))}function s(e){function n(){var t=null;switch(l.renderer){case"canvas":t=M(u,e);break;case"svg":t=F(u,e);break;default:throw"Holder: invalid renderer: "+l.renderer}return t}var i=null,o=e.mode,r=e.holderSettings,s=e.el,l=e.engineSettings;switch(l.renderer){case"svg":if(!R.setup.supportsSVG)return;break;case"canvas":if(!R.setup.supportsCanvas)return;break;default:return}var c={width:r.dimensions.width,height:r.dimensions.height,theme:r.theme,flags:r.flags},u=a(c);if(i=n(),null==i)throw"Holder: couldn't render placeholder";"background"==o?(s.style.backgroundImage="url("+i+")",s.style.backgroundSize=c.width+"px "+c.height+"px"):("img"===s.nodeName.toLowerCase()?g(s,{src:i}):"object"===s.nodeName.toLowerCase()&&(g(s,{data:i}),g(s,{type:"image/svg+xml"})),l.reRender&&t.setTimeout(function(){var e=n();if(null==e)throw"Holder: couldn't render placeholder";"img"===s.nodeName.toLowerCase()?g(s,{src:e}):"object"===s.nodeName.toLowerCase()&&(g(s,{data:e}),g(s,{type:"image/svg+xml"}))},100)),g(s,{"data-holder-rendered":!0})}function a(e){function t(e,t,n,i){t.width=n,t.height=i,e.width=Math.max(e.width,t.width),e.height+=t.height,e.add(t)}var n=R.defaults.size;switch(parseFloat(e.theme.size)?n=e.theme.size:parseFloat(e.flags.size)&&(n=e.flags.size),e.font={family:e.theme.font?e.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:l(e.width,e.height,n),units:e.theme.units?e.theme.units:R.defaults.units,weight:e.theme.fontweight?e.theme.fontweight:"bold"},e.text=e.theme.text?e.theme.text:Math.floor(e.width)+"x"+Math.floor(e.height),e.flags.textmode){case"literal":e.text=e.flags.dimensions.width+"x"+e.flags.dimensions.height;break;case"exact":if(!e.flags.exactDimensions)break;e.text=Math.floor(e.flags.exactDimensions.width)+"x"+Math.floor(e.flags.exactDimensions.height)}var i=new w({width:e.width,height:e.height}),o=i.Shape,r=new o.Rect("holderBg",{fill:e.theme.background});r.resize(e.width,e.height),i.root.add(r);var s=new o.Group("holderTextGroup",{text:e.text,align:"center",font:e.font,fill:e.theme.foreground});s.moveTo(null,null,1),i.root.add(s);var a=s.textPositionData=H(i);if(!a)throw"Holder: staging fallback not supported yet.";s.properties.leading=a.boundingBox.height;var c=null,u=null;if(a.lineCount>1){var d=0,f=0,p=e.width*R.setup.lineWrapRatio,h=0;u=new o.Group("line"+h);for(var g=0;g<a.words.length;g++){var m=a.words[g];c=new o.Text(m.text);var v="\\n"==m.text;(d+m.width>=p||v===!0)&&(t(s,u,d,s.properties.leading),d=0,f+=s.properties.leading,h+=1,u=new o.Group("line"+h),u.y=f),v!==!0&&(c.moveTo(d,0),d+=a.spaceWidth+m.width,u.add(c))}t(s,u,d,s.properties.leading);for(var y in s.children)u=s.children[y],u.moveTo((s.width-u.width)/2,null,null);s.moveTo((e.width-s.width)/2,(e.height-s.height)/2,null),(e.height-s.height)/2<0&&s.moveTo(null,0,null)}else c=new o.Text(e.text),u=new o.Group("line0"),u.add(c),s.add(u),s.moveTo((e.width-a.boundingBox.width)/2,(e.height-a.boundingBox.height)/2,null);return i}function l(e,t,n){var i=parseInt(e,10),o=parseInt(t,10),r=Math.max(i,o),s=Math.min(i,o),a=.8*Math.min(s,r*R.defaults.scale);return Math.round(Math.max(n,a))}function c(e){var t;t=null==e||null==e.nodeType?R.vars.resizableImages:[e];for(var n=0,i=t.length;i>n;n++){var o=t[n];if(o.holderData){var r=o.holderData.flags,a=$(o);if(a){if(!o.holderData.resizeUpdate)continue;if(r.fluid&&r.auto){var l=o.holderData.fluidConfig;switch(l.mode){case"width":a.height=a.width/l.ratio;break;case"height":a.width=a.height*l.ratio}}var c={mode:"image",holderSettings:{dimensions:a,theme:r.theme,flags:r},el:o,engineSettings:o.holderData.engineSettings};"exact"==r.textmode&&(r.exactDimensions=a,c.holderSettings.dimensions=r.dimensions),s(c)}else p(o)}}}function u(e){if(e.holderData){var t=$(e);if(t){var n=e.holderData.flags,i={fluidHeight:"%"==n.dimensions.height.slice(-1),fluidWidth:"%"==n.dimensions.width.slice(-1),mode:null,initialDimensions:t};i.fluidWidth&&!i.fluidHeight?(i.mode="width",i.ratio=i.initialDimensions.width/parseFloat(n.dimensions.height)):!i.fluidWidth&&i.fluidHeight&&(i.mode="height",i.ratio=parseFloat(n.dimensions.width)/i.initialDimensions.height),e.holderData.fluidConfig=i}else p(e)}}function d(){for(var e,n=[],i=Object.keys(R.vars.invisibleImages),o=0,r=i.length;r>o;o++)e=R.vars.invisibleImages[i[o]],$(e)&&"img"==e.nodeName.toLowerCase()&&(n.push(e),delete R.vars.invisibleImages[i[o]]);n.length&&B.run({images:n}),t.requestAnimationFrame(d)}function f(){R.vars.visibilityCheckStarted||(t.requestAnimationFrame(d),R.vars.visibilityCheckStarted=!0)}function p(e){e.holderData.invisibleId||(R.vars.invisibleId+=1,R.vars.invisibleImages["i"+R.vars.invisibleId]=e,e.holderData.invisibleId=R.vars.invisibleId)}function h(e,t){return null==t?document.createElement(e):document.createElementNS(t,e)}function g(e,t){for(var n in t)e.setAttribute(n,t[n])}function m(e,t,n){var i,o;null==e?(e=h("svg",j),i=h("defs",j),o=h("style",j),g(o,{type:"text/css"}),i.appendChild(o),e.appendChild(i)):o=e.querySelector("style"),e.webkitMatchesSelector&&e.setAttribute("xmlns",j);for(var r=0;r<e.childNodes.length;r++)e.childNodes[r].nodeType===L&&e.removeChild(e.childNodes[r]);for(;o.childNodes.length;)o.removeChild(o.childNodes[0]);return g(e,{width:t,height:n,viewBox:"0 0 "+t+" "+n,preserveAspectRatio:"none"}),e}function v(e,n){if(t.XMLSerializer){var i=new XMLSerializer,o="",r=n.stylesheets;if(n.svgXMLStylesheet){for(var s=y(),a=r.length-1;a>=0;a--){var l=s.createProcessingInstruction("xml-stylesheet",'href="'+r[a]+'" rel="stylesheet"');s.insertBefore(l,s.firstChild)}var c=s.createProcessingInstruction("xml",'version="1.0" encoding="UTF-8" standalone="yes"');s.insertBefore(c,s.firstChild),s.removeChild(s.documentElement),o=i.serializeToString(s)}var u=i.serializeToString(e);return u=u.replace(/\&amp;(\#[0-9]{2,}\;)/g,"&$1"),o+u}}function y(){return t.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function b(e){R.vars.debounceTimer||e.call(this),R.vars.debounceTimer&&t.clearTimeout(R.vars.debounceTimer),R.vars.debounceTimer=t.setTimeout(function(){R.vars.debounceTimer=null,e.call(this)},R.setup.debounce)}function A(){b(function(){c(null)})}var x=n(1),w=n(2),C=n(3),T=C.extend,E=C.cssProps,S=C.encodeHtmlEntity,k=C.decodeHtmlEntity,N=C.imageExists,D=C.getNodeArray,$=C.dimensionCheck,j="http://www.w3.org/2000/svg",L=8,O="2.6.0",I="\nCreated with Holder.js "+O+".\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n",B={version:O,addTheme:function(e,t){return null!=e&&null!=t&&(R.settings.themes[e]=t),delete R.vars.cache.themeKeys,this},addImage:function(e,t){var n=document.querySelectorAll(t);if(n.length)for(var i=0,o=n.length;o>i;i++){var r=h("img"),s={};s[R.vars.dataAttr]=e,g(r,s),n[i].appendChild(r)}return this},setResizeUpdate:function(e,t){e.holderData&&(e.holderData.resizeUpdate=!!t,e.holderData.resizeUpdate&&c(e))},run:function(e){e=e||{};var n={},s=T(R.settings,e);R.vars.preempted=!0,R.vars.dataAttr=s.dataAttr||R.vars.dataAttr,n.renderer=s.renderer?s.renderer:R.setup.renderer,-1===R.setup.renderers.join(",").indexOf(n.renderer)&&(n.renderer=R.setup.supportsSVG?"svg":R.setup.supportsCanvas?"canvas":"html");var a=D(s.images),l=D(s.bgnodes),c=D(s.stylenodes),u=D(s.objects);n.stylesheets=[],n.svgXMLStylesheet=!0,n.noFontFallback=!!s.noFontFallback&&s.noFontFallback;for(var d=0;d<c.length;d++){var f=c[d];if(f.attributes.rel&&f.attributes.href&&"stylesheet"==f.attributes.rel.value){var p=f.attributes.href.value,g=h("a");g.href=p;var m=g.protocol+"//"+g.host+g.pathname+g.search;n.stylesheets.push(m)}}for(d=0;d<l.length;d++)if(t.getComputedStyle){var v=t.getComputedStyle(l[d],null).getPropertyValue("background-image"),y=l[d].getAttribute("data-background-src"),b=null;b=null==y?v:y;var A=null,x="?"+s.domain+"/";if(0===b.indexOf(x))A=b.slice(1);else if(-1!=b.indexOf(x)){var w=b.substr(b.indexOf(x)).slice(1),C=w.match(/([^\"]*)"?\)/);null!=C&&(A=C[1])}if(null!=A){var E=o(A,s);E&&r({mode:"background",el:l[d],flags:E,engineSettings:n})}}for(d=0;d<u.length;d++){var S=u[d],k={};try{k.data=S.getAttribute("data"),k.dataSrc=S.getAttribute(R.vars.dataAttr)}catch(e){}var $=null!=k.data&&0===k.data.indexOf(s.domain),j=null!=k.dataSrc&&0===k.dataSrc.indexOf(s.domain);$?i(s,n,k.data,S):j&&i(s,n,k.dataSrc,S)}for(d=0;d<a.length;d++){var L=a[d],O={};try{O.src=L.getAttribute("src"),O.dataSrc=L.getAttribute(R.vars.dataAttr),O.rendered=L.getAttribute("data-holder-rendered")}catch(e){}var I=null!=O.src,B=null!=O.dataSrc&&0===O.dataSrc.indexOf(s.domain),H=null!=O.rendered&&"true"==O.rendered;I?0===O.src.indexOf(s.domain)?i(s,n,O.src,L):B&&(H?i(s,n,O.dataSrc,L):!function(e,t,n,o,r){N(e,function(e){e||i(t,n,o,r)})}(O.src,s,n,O.dataSrc,L)):B&&i(s,n,O.dataSrc,L)}return this}},R={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(e){var t=this.regex.exec(e);return{width:+t[1],height:+t[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(e){var t=this.regex.exec(e);return{width:t[1],height:t[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(e){var t=this.regex.exec(e);return{foreground:"#"+t[2],background:"#"+t[1]}}},text:{regex:/text\:(.*)/,output:function(e){return this.regex.exec(e)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(e){return this.regex.exec(e)[1]}}}},H=function(){var e=null,t=null,n=null;return function(i){var o=i.root;if(R.setup.supportsSVG){var r=!1,s=function(e){return document.createTextNode(e)};(null==e||e.parentNode!==document.body)&&(r=!0),e=m(e,o.properties.width,o.properties.height),e.style.display="block",r&&(t=h("text",j),n=s(null),g(t,{x:0}),t.appendChild(n),e.appendChild(t),document.body.appendChild(e),e.style.visibility="hidden",e.style.position="absolute",e.style.top="-100%",e.style.left="-100%");var a=o.children.holderTextGroup,l=a.properties;g(t,{y:l.font.size,style:E({"font-weight":l.font.weight,"font-size":l.font.size+l.font.units,"font-family":l.font.family})}),n.nodeValue=l.text;var c=t.getBBox(),u=Math.ceil(c.width/(o.properties.width*R.setup.lineWrapRatio)),d=l.text.split(" "),f=l.text.match(/\\n/g);u+=null==f?0:f.length,n.nodeValue=l.text.replace(/[ ]+/g,"");var p=t.getComputedTextLength(),v=c.width-p,y=Math.round(v/Math.max(1,d.length-1)),b=[];if(u>1){n.nodeValue="";for(var A=0;A<d.length;A++)if(0!==d[A].length){n.nodeValue=k(d[A]);var x=t.getBBox();b.push({text:d[A],width:x.width})}}return e.style.display="none",{spaceWidth:y,lineCount:u,boundingBox:c,words:b}}return!1}}(),M=function(){var e=h("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var i=n.root;e.width=R.dpr(i.properties.width),e.height=R.dpr(i.properties.height),t.textBaseline="middle",t.fillStyle=i.children.holderBg.properties.fill,t.fillRect(0,0,R.dpr(i.children.holderBg.width),R.dpr(i.children.holderBg.height));var o=i.children.holderTextGroup;o.properties,t.font=o.properties.font.weight+" "+R.dpr(o.properties.font.size)+o.properties.font.units+" "+o.properties.font.family+", monospace",t.fillStyle=o.properties.fill;for(var r in o.children){var s=o.children[r];for(var a in s.children){var l=s.children[a],c=R.dpr(o.x+s.x+l.x),u=R.dpr(o.y+s.y+l.y+o.properties.leading/2);t.fillText(l.properties.text,c,u)}}return e.toDataURL("image/png")}}(),F=function(){if(t.XMLSerializer){var e=y(),n=m(null,0,0),i=h("rect",j);return n.appendChild(i),function(t,o){var r=t.root;m(n,r.properties.width,r.properties.height);for(var s=n.querySelectorAll("g"),a=0;a<s.length;a++)s[a].parentNode.removeChild(s[a]);var l=o.holderSettings.flags.holderURL,c="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),u=h("g",j),d=r.children.holderTextGroup,f=d.properties,p=h("g",j),y=d.textPositionData,b="#"+c+" text { "+E({fill:f.fill,"font-weight":f.font.weight,"font-family":f.font.family+", monospace","font-size":f.font.size+f.font.units})+" } ",A=e.createComment("\nSource URL: "+l+I),x=e.createCDATASection(b),w=n.querySelector("style");g(u,{id:c}),n.insertBefore(A,n.firstChild),w.appendChild(x),u.appendChild(i),u.appendChild(p),n.appendChild(u),g(i,{width:r.children.holderBg.width,height:r.children.holderBg.height,fill:r.children.holderBg.properties.fill}),d.y+=.8*y.boundingBox.height;for(var C in d.children){var T=d.children[C];for(var S in T.children){var k=T.children[S],N=d.x+T.x+k.x,D=d.y+T.y+k.y,$=h("text",j),L=document.createTextNode(null);g($,{x:N,y:D}),L.nodeValue=k.properties.text,$.appendChild(L),p.appendChild($)}}var O="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(v(n,o.engineSettings))));return O}}}();for(var P in R.flags)R.flags.hasOwnProperty(P)&&(R.flags[P].match=function(e){return e.match(this.regex)});R.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},R.dpr=function(e){return e*R.setup.ratio},R.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var e=1,n=1,i=h("canvas"),o=null;i.getContext&&-1!=i.toDataURL("image/png").indexOf("data:image/png")&&(R.setup.renderer="canvas",o=i.getContext("2d"),R.setup.supportsCanvas=!0),R.setup.supportsCanvas&&(e=t.devicePixelRatio||1,n=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),R.setup.ratio=e/n,document.createElementNS&&document.createElementNS(j,"svg").createSVGRect&&(R.setup.renderer="svg",R.setup.supportsSVG=!0)}(),f(),x&&x(function(){R.vars.preempted||B.run(),t.addEventListener?(t.addEventListener("resize",A,!1),t.addEventListener("orientationchange",A,!1)):t.attachEvent("onresize",A),"object"==typeof t.Turbolinks&&t.document.addEventListener("page:change",function(){B.run()})}),e.exports=B}).call(t,function(){return this}())},function(e){function t(e){function t(e){if(!x){if(!s.body)return o(t);for(x=!0;e=w.shift();)o(e)}}function n(e){(b||e.type===l||s[f]===d)&&(i(),t())}function i(){b?(s[y](m,n,c),e[y](l,n,c)):(s[h](v,n),e[h](u,n))}function o(e,t){setTimeout(e,+t>=0?t:1)}function r(e){x?o(e):w.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e,!1),document.readyState="complete"},!1),document.readyState="loading");var s=e.document,a=s.documentElement,l="load",c=!1,u="on"+l,d="complete",f="readyState",p="attachEvent",h="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",b=g in s,A=c,x=c,w=[];if(s[f]===d)o(t);else if(b)s[g](m,n,c),e[g](l,n,c);else{s[p](v,n),e[p](u,n);try{A=null==e.frameElement&&a}catch(e){}A&&A.doScroll&&!function e(){if(!x){try{A.doScroll("left")}catch(t){return o(e,50)}i(),t()}}()}return r.version="1.4.0",r.isReady=function(){return x},r}e.exports="undefined"!=typeof window&&t(window)},function(e,t,n){var i=n(4),o=function(e){function t(e,t){for(var n in t)e[n]=t[n];return e}var n=1,o=i.defclass({constructor:function(e){n++,this.parent=null,this.children={},this.id=n,this.name="n"+n,null!=e&&(this.name=e),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(e,t){null!=e&&(this.width=e),null!=t&&(this.height=t)},moveTo:function(e,t,n){this.x=null!=e?e:this.x,this.y=null!=t?t:this.y,this.z=null!=n?n:this.z},add:function(e){var t=e.name;if(null!=this.children[t])throw"SceneGraph: child with that name already exists: "+t;this.children[t]=e,e.parent=this}}),r=i(o,function(t){this.constructor=function(){t.constructor.call(this,"root"),this.properties=e}}),s=i(o,function(e){function n(n,i){if(e.constructor.call(this,n),this.properties={fill:"#000"},null!=i)t(this.properties,i);else if(null!=n&&"string"!=typeof n)throw"SceneGraph: invalid node name"}this.Group=i.extend(this,{constructor:n,type:"group"}),this.Rect=i.extend(this,{constructor:n,type:"rect"}),this.Text=i.extend(this,{constructor:function(e){n.call(this),this.properties.text=e},type:"text"})}),a=new r;return this.Shape=s,this.root=a,this};e.exports=o},function(e,t){(function(e){t.extend=function(e,t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);if(null!=t)for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);return n},t.cssProps=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+":"+e[n]);return t.join(";")},t.encodeHtmlEntity=function(e){for(var t=[],n=0,i=e.length-1;i>=0;i--)n=e.charCodeAt(i),t.unshift(n>128?["&#",n,";"].join(""):e[i]);return t.join("")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t}}).call(t,function(){return this}())},function(e){var t=function(){},n=Array.prototype.slice,i=function(e,i){var o=t.prototype="function"==typeof e?e.prototype:e,r=new t,s=i.apply(r,n.call(arguments,2).concat(o));if("object"==typeof s)for(var a in s)r[a]=s[a];if(!r.hasOwnProperty("constructor"))return r;var l=r.constructor;return l.prototype=r,l};i.defclass=function(e){var t=e.constructor;return t.prototype=e,t},i.extend=function(e,t){return i(e,function(e){return this.uber=e,t})},e.exports=i}])}),!function(e){"use strict";function t(e){return e.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function n(e){return parseFloat(t(e))>=10}var i,o={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},r={},s=0,a={},l=0,c={},u=null,d=null,f=function(){var e,t,n,i,o="ZeroClipboard.swf";
-if(document.currentScript&&(i=document.currentScript.src));else{var r=document.getElementsByTagName("script");if("readyState"in r[0])for(e=r.length;e--&&("interactive"!==r[e].readyState||!(i=r[e].src)););else if("loading"===document.readyState)i=r[r.length-1].src;else{for(e=r.length;e--;){if(n=r[e].src,!n){t=null;break}if(n=n.split("#")[0].split("?")[0],n=n.slice(0,n.lastIndexOf("/")+1),null==t)t=n;else if(t!==n){t=null;break}}null!==t&&(i=t)}}return i&&(i=i.split("#")[0].split("?")[0],o=i.slice(0,i.lastIndexOf("/")+1)+o),o}(),p=function(){var e=/\-([a-z])/g,t=function(e,t){return t.toUpperCase()};return function(n){return n.replace(e,t)}}(),h=function(t,n){var i,o,r;return e.getComputedStyle?i=e.getComputedStyle(t,null).getPropertyValue(n):(o=p(n),i=t.currentStyle?t.currentStyle[o]:t.style[o]),"cursor"!==n||i&&"auto"!==i||(r=t.tagName.toLowerCase(),"a"!==r)?i:"pointer"},g=function(t){t||(t=e.event);var n;this!==e?n=this:t.target?n=t.target:t.srcElement&&(n=t.srcElement),R.activate(n)},m=function(e,t,n){e&&1===e.nodeType&&(e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n))},v=function(e,t,n){e&&1===e.nodeType&&(e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent&&e.detachEvent("on"+t,n))},y=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)||e.classList.add(t),e;if(t&&"string"==typeof t){var n=(t||"").split(/\s+/);if(1===e.nodeType)if(e.className){for(var i=" "+e.className+" ",o=e.className,r=0,s=n.length;s>r;r++)i.indexOf(" "+n[r]+" ")<0&&(o+=" "+n[r]);e.className=o.replace(/^\s+|\s+$/g,"")}else e.className=t}return e},b=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)&&e.classList.remove(t),e;if(t&&"string"==typeof t||void 0===t){var n=(t||"").split(/\s+/);if(1===e.nodeType&&e.className)if(t){for(var i=(" "+e.className+" ").replace(/[\n\t]/g," "),o=0,r=n.length;r>o;o++)i=i.replace(" "+n[o]+" "," ");e.className=i.replace(/^\s+|\s+$/g,"")}else e.className=""}return e},A=function(){var e,t,n,i=1;return"function"==typeof document.body.getBoundingClientRect&&(e=document.body.getBoundingClientRect(),t=e.right-e.left,n=document.body.offsetWidth,i=Math.round(t/n*100)/100),i},x=function(t,n){var i={left:0,top:0,width:0,height:0,zIndex:k(n)-1};if(t.getBoundingClientRect){var o,r,s,a=t.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(o=e.pageXOffset,r=e.pageYOffset):(s=A(),o=Math.round(document.documentElement.scrollLeft/s),r=Math.round(document.documentElement.scrollTop/s));var l=document.documentElement.clientLeft||0,c=document.documentElement.clientTop||0;i.left=a.left+o-l,i.top=a.top+r-c,i.width="width"in a?a.width:a.right-a.left,i.height="height"in a?a.height:a.bottom-a.top}return i},w=function(e,t){var n=null==t||t&&t.cacheBust===!0&&t.useNoCache===!0;return n?(-1===e.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},C=function(t){var n,i,o,r=[],s=[],a=[];if(t.trustedOrigins&&("string"==typeof t.trustedOrigins?s.push(t.trustedOrigins):"object"==typeof t.trustedOrigins&&"length"in t.trustedOrigins&&(s=s.concat(t.trustedOrigins))),t.trustedDomains&&("string"==typeof t.trustedDomains?s.push(t.trustedDomains):"object"==typeof t.trustedDomains&&"length"in t.trustedDomains&&(s=s.concat(t.trustedDomains))),s.length)for(n=0,i=s.length;i>n;n++)if(s.hasOwnProperty(n)&&s[n]&&"string"==typeof s[n]){if(o=$(s[n]),!o)continue;if("*"===o){a=[o];break}a.push.apply(a,[o,"//"+o,e.location.protocol+"//"+o])}return a.length&&r.push("trustedOrigins="+encodeURIComponent(a.join(","))),"string"==typeof t.jsModuleId&&t.jsModuleId&&r.push("jsModuleId="+encodeURIComponent(t.jsModuleId)),r.join("&")},T=function(e,t,n){if("function"==typeof t.indexOf)return t.indexOf(e,n);var i,o=t.length;for("undefined"==typeof n?n=0:0>n&&(n=o+n),i=n;o>i;i++)if(t.hasOwnProperty(i)&&t[i]===e)return i;return-1},E=function(e){if("string"==typeof e)throw new TypeError("ZeroClipboard doesn't accept query strings.");return e.length?e:[e]},S=function(t,n,i,o){o?e.setTimeout(function(){t.apply(n,i)},0):t.apply(n,i)},k=function(e){var t,n;return e&&("number"==typeof e&&e>0?t=e:"string"==typeof e&&(n=parseInt(e,10))&&!isNaN(n)&&n>0&&(t=n)),t||("number"==typeof F.zIndex&&F.zIndex>0?t=F.zIndex:"string"==typeof F.zIndex&&(n=parseInt(F.zIndex,10))&&!isNaN(n)&&n>0&&(t=n)),t||0},N=function(e,t){if(e&&t!==!1&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var n="`"+e+"` is deprecated. See docs for more info:\n    https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(n):console.log(n)}},D=function(){var e,t,n,i,o,r,s=arguments[0]||{};for(e=1,t=arguments.length;t>e;e++)if(null!=(n=arguments[e]))for(i in n)if(n.hasOwnProperty(i)){if(o=s[i],r=n[i],s===r)continue;void 0!==r&&(s[i]=r)}return s},$=function(e){if(null==e||""===e)return null;if(e=e.replace(/^\s+|\s+$/g,""),""===e)return null;var t=e.indexOf("//");e=-1===t?e:e.slice(t+2);var n=e.indexOf("/");return e=-1===n?e:-1===t||0===n?null:e.slice(0,n),e&&".swf"===e.slice(-4).toLowerCase()?null:e||null},j=function(){var e=function(e,t){var n,i,o;if(null!=e&&"*"!==t[0]&&("string"==typeof e&&(e=[e]),"object"==typeof e&&"length"in e))for(n=0,i=e.length;i>n;n++)if(e.hasOwnProperty(n)&&(o=$(e[n]))){if("*"===o){t.length=0,t.push("*");break}-1===T(o,t)&&t.push(o)}},t={always:"always",samedomain:"sameDomain",never:"never"};return function(n,i){var o,r=i.allowScriptAccess;if("string"==typeof r&&(o=r.toLowerCase())&&/^always|samedomain|never$/.test(o))return t[o];var s=$(i.moviePath);null===s&&(s=n);var a=[];e(i.trustedOrigins,a),e(i.trustedDomains,a);var l=a.length;if(l>0){if(1===l&&"*"===a[0])return"always";if(-1!==T(n,a))return 1===l&&n===s?"sameDomain":"always"}return"never"}}(),L=function(e){if(null==e)return[];if(Object.keys)return Object.keys(e);var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},O=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&delete e[t];return e},I=function(){try{return document.activeElement}catch(e){}return null},B=function(){var e=!1;if("boolean"==typeof o.disabled)e=o.disabled===!1;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(e=!0)}catch(e){}!e&&navigator.mimeTypes["application/x-shockwave-flash"]&&(e=!0)}return e},R=function(e,t){return this instanceof R?(this.id=""+s++,a[this.id]={instance:this,elements:[],handlers:{}},e&&this.clip(e),"undefined"!=typeof t&&(N("new ZeroClipboard(elements, options)",F.debug),R.config(t)),this.options=R.config(),"boolean"!=typeof o.disabled&&(o.disabled=!B()),void(o.disabled===!1&&o.outdated!==!0&&null===o.bridge&&(o.outdated=!1,o.ready=!1,P()))):new R(e,t)};R.prototype.setText=function(e){return e&&""!==e&&(r["text/plain"]=e,o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setText?o.bridge.setText(e):o.ready=!1),this},R.prototype.setSize=function(e,t){return o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e,t):o.ready=!1,this};var H=function(e){o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setHandCursor?o.bridge.setHandCursor(e):o.ready=!1};R.prototype.destroy=function(){this.unclip(),this.off(),delete a[this.id]};var M=function(){var e,t,n,i=[],o=L(a);for(e=0,t=o.length;t>e;e++)n=a[o[e]].instance,n&&n instanceof R&&i.push(n);return i};R.version="1.3.5";var F={swfPath:f,trustedDomains:e.location.host?[e.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};R.config=function(e){if("object"==typeof e&&null!==e&&D(F,e),"string"!=typeof e||!e){var t={};for(var n in F)F.hasOwnProperty(n)&&(t[n]="object"==typeof F[n]&&null!==F[n]?"length"in F[n]?F[n].slice(0):D({},F[n]):F[n]);return t}return F.hasOwnProperty(e)?F[e]:void 0},R.destroy=function(){R.deactivate();for(var e in a)if(a.hasOwnProperty(e)&&a[e]){var t=a[e].instance;t&&"function"==typeof t.destroy&&t.destroy()}var n=z(o.bridge);n&&n.parentNode&&(n.parentNode.removeChild(n),o.ready=null,o.bridge=null)},R.activate=function(e){i&&(b(i,F.hoverClass),b(i,F.activeClass)),i=e,y(e,F.hoverClass),q();var t=F.title||e.getAttribute("title");if(t){var n=z(o.bridge);n&&n.setAttribute("title",t)}var r=F.forceHandCursor===!0||"pointer"===h(e,"cursor");H(r)},R.deactivate=function(){var e=z(o.bridge);e&&(e.style.left="0px",e.style.top="-9999px",e.removeAttribute("title")),i&&(b(i,F.hoverClass),b(i,F.activeClass),i=null)};var P=function(){var t,n,i=document.getElementById("global-zeroclipboard-html-bridge");if(!i){var r=R.config();r.jsModuleId="string"==typeof u&&u||"string"==typeof d&&d||null;var s=j(e.location.host,F),a=C(r),l=F.moviePath+w(F.moviePath,F),c='      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%">         <param name="movie" value="'+l+'"/>         <param name="allowScriptAccess" value="'+s+'"/>         <param name="scale" value="exactfit"/>         <param name="loop" value="false"/>         <param name="menu" value="false"/>         <param name="quality" value="best" />         <param name="bgcolor" value="#ffffff"/>         <param name="wmode" value="transparent"/>         <param name="flashvars" value="'+a+'"/>         <embed src="'+l+'"           loop="false" menu="false"           quality="best" bgcolor="#ffffff"           width="100%" height="100%"           name="global-zeroclipboard-flash-bridge"           allowScriptAccess="'+s+'"           allowFullScreen="false"           type="application/x-shockwave-flash"           wmode="transparent"           pluginspage="http://www.macromedia.com/go/getflashplayer"           flashvars="'+a+'"           scale="exactfit">         </embed>       </object>';i=document.createElement("div"),i.id="global-zeroclipboard-html-bridge",i.setAttribute("class","global-zeroclipboard-container"),i.style.position="absolute",i.style.left="0px",i.style.top="-9999px",i.style.width="15px",i.style.height="15px",i.style.zIndex=""+k(F.zIndex),document.body.appendChild(i),i.innerHTML=c}t=document["global-zeroclipboard-flash-bridge"],t&&(n=t.length)&&(t=t[n-1]),o.bridge=t||i.children[0].lastElementChild},z=function(e){for(var t=/^OBJECT|EMBED$/,n=e&&e.parentNode;n&&t.test(n.nodeName)&&n.parentNode;)n=n.parentNode;return n||null},q=function(){if(i){var e=x(i,F.zIndex),t=z(o.bridge);t&&(t.style.top=e.top+"px",t.style.left=e.left+"px",t.style.width=e.width+"px",t.style.height=e.height+"px",t.style.zIndex=e.zIndex+1),o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e.width,e.height):o.ready=!1}return this};R.prototype.on=function(e,t){var n,i,r,s={},l=a[this.id]&&a[this.id].handlers;if("string"==typeof e&&e)r=e.toLowerCase().split(/\s+/);else if("object"==typeof e&&e&&"undefined"==typeof t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.on(n,e[n]);if(r&&r.length){for(n=0,i=r.length;i>n;n++)e=r[n].replace(/^on/,""),s[e]=!0,l[e]||(l[e]=[]),l[e].push(t);s.noflash&&o.disabled&&U.call(this,"noflash",{}),s.wrongflash&&o.outdated&&U.call(this,"wrongflash",{flashVersion:o.version}),s.load&&o.ready&&U.call(this,"load",{flashVersion:o.version})}return this},R.prototype.off=function(e,t){var n,i,o,r,s,l=a[this.id]&&a[this.id].handlers;if(0===arguments.length)r=L(l);else if("string"==typeof e&&e)r=e.split(/\s+/);else if("object"==typeof e&&e&&"undefined"==typeof t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.off(n,e[n]);if(r&&r.length)for(n=0,i=r.length;i>n;n++)if(e=r[n].toLowerCase().replace(/^on/,""),s=l[e],s&&s.length)if(t)for(o=T(t,s);-1!==o;)s.splice(o,1),o=T(t,s,o);else l[e].length=0;return this},R.prototype.handlers=function(e){var t,n=null,i=a[this.id]&&a[this.id].handlers;if(i){if("string"==typeof e&&e)return i[e]?i[e].slice(0):null;n={};for(t in i)i.hasOwnProperty(t)&&i[t]&&(n[t]=i[t].slice(0))}return n};var _=function(t,n,i,o){var r=a[this.id]&&a[this.id].handlers[t];if(r&&r.length){var s,l,c,u=n||this;for(s=0,l=r.length;l>s;s++)c=r[s],n=u,"string"==typeof c&&"function"==typeof e[c]&&(c=e[c]),"object"==typeof c&&c&&"function"==typeof c.handleEvent&&(n=c,c=c.handleEvent),"function"==typeof c&&S(c,n,i,o)}return this};R.prototype.clip=function(e){e=E(e);for(var t=0;t<e.length;t++)if(e.hasOwnProperty(t)&&e[t]&&1===e[t].nodeType){e[t].zcClippingId?-1===T(this.id,c[e[t].zcClippingId])&&c[e[t].zcClippingId].push(this.id):(e[t].zcClippingId="zcClippingId_"+l++,c[e[t].zcClippingId]=[this.id],F.autoActivate===!0&&m(e[t],"mouseover",g));var n=a[this.id].elements;-1===T(e[t],n)&&n.push(e[t])}return this},R.prototype.unclip=function(e){var t=a[this.id];if(t){var n,i=t.elements;e="undefined"==typeof e?i.slice(0):E(e);for(var o=e.length;o--;)if(e.hasOwnProperty(o)&&e[o]&&1===e[o].nodeType){for(n=0;-1!==(n=T(e[o],i,n));)i.splice(n,1);var r=c[e[o].zcClippingId];if(r){for(n=0;-1!==(n=T(this.id,r,n));)r.splice(n,1);0===r.length&&(F.autoActivate===!0&&v(e[o],"mouseover",g),delete e[o].zcClippingId)}}}return this},R.prototype.elements=function(){var e=a[this.id];return e&&e.elements?e.elements.slice(0):[]};var W=function(e){var t,n,i,o,r,s=[];if(e&&1===e.nodeType&&(t=e.zcClippingId)&&c.hasOwnProperty(t)&&(n=c[t],n&&n.length))for(i=0,o=n.length;o>i;i++)r=a[n[i]].instance,r&&r instanceof R&&s.push(r);return s};F.hoverClass="zeroclipboard-is-hover",F.activeClass="zeroclipboard-is-active",F.trustedOrigins=null,F.allowScriptAccess=null,F.useNoCache=!0,F.moviePath="ZeroClipboard.swf",R.detectFlashSupport=function(){return N("ZeroClipboard.detectFlashSupport",F.debug),B()},R.dispatch=function(e,t){if("string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");if(n)for(var o=i&&F.autoActivate===!0?W(i):M(),r=0,s=o.length;s>r;r++)U.call(o[r],n,t)}},R.prototype.setHandCursor=function(e){return N("ZeroClipboard.prototype.setHandCursor",F.debug),e="boolean"==typeof e?e:!!e,H(e),F.forceHandCursor=e,this},R.prototype.reposition=function(){return N("ZeroClipboard.prototype.reposition",F.debug),q()},R.prototype.receiveEvent=function(e,t){if(N("ZeroClipboard.prototype.receiveEvent",F.debug),"string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");n&&U.call(this,n,t)}},R.prototype.setCurrent=function(e){return N("ZeroClipboard.prototype.setCurrent",F.debug),R.activate(e),this},R.prototype.resetBridge=function(){return N("ZeroClipboard.prototype.resetBridge",F.debug),R.deactivate(),this},R.prototype.setTitle=function(e){if(N("ZeroClipboard.prototype.setTitle",F.debug),e=e||F.title||i&&i.getAttribute("title")){var t=z(o.bridge);t&&t.setAttribute("title",e)}return this},R.setDefaults=function(e){N("ZeroClipboard.setDefaults",F.debug),R.config(e)},R.prototype.addEventListener=function(e,t){return N("ZeroClipboard.prototype.addEventListener",F.debug),this.on(e,t)},R.prototype.removeEventListener=function(e,t){return N("ZeroClipboard.prototype.removeEventListener",F.debug),this.off(e,t)},R.prototype.ready=function(){return N("ZeroClipboard.prototype.ready",F.debug),o.ready===!0};var U=function(e,s){e=e.toLowerCase().replace(/^on/,"");var a=s&&s.flashVersion&&t(s.flashVersion)||null,l=i,c=!0;switch(e){case"load":if(a){if(!n(a))return void U.call(this,"onWrongFlash",{flashVersion:a});o.outdated=!1,o.ready=!0,o.version=a}break;case"wrongflash":a&&!n(a)&&(o.outdated=!0,o.ready=!1,o.version=a);break;case"mouseover":y(l,F.hoverClass);break;case"mouseout":F.autoActivate===!0&&R.deactivate();break;case"mousedown":y(l,F.activeClass);break;case"mouseup":b(l,F.activeClass);break;case"datarequested":if(l){var u=l.getAttribute("data-clipboard-target"),d=u?document.getElementById(u):null;if(d){var f=d.value||d.textContent||d.innerText;f&&this.setText(f)}else{var p=l.getAttribute("data-clipboard-text");p&&this.setText(p)}}c=!1;break;case"complete":O(r),l&&l!==I()&&l.focus&&l.focus()}var h=l,g=[this,s];return _.call(this,e,h,g,c)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(e,t,n){return u=n&&n.id||null,R}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof e.require?(d=module.id||null,module.exports=R):e.ZeroClipboard=R}(function(){return this}());var anchors=new AnchorJS;!function(e){"use strict";e(function(){var t=e(window),n=e(document.body);n.scrollspy({target:".docs-sidebar"}),t.on("load",function(){n.scrollspy("refresh")}),e(".docs-container [href=#]").click(function(e){e.preventDefault()}),setTimeout(function(){var t=e(".docs-sidebar");t.affix({offset:{top:function(){var n=t.offset().top,i=parseInt(t.children(0).css("margin-top"),10),o=e(".docs-nav").height();return this.top=n-o-i},bottom:function(){return this.bottom=e(".docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){e(".bs-top").affix()},100),function(){var t=e("#bs-theme-stylesheet"),n=e(".docs-theme-toggle"),i=function(){t.attr("href",t.attr("data-href")),n.text("禁用主题预览"),localStorage.setItem("previewTheme",!0)};localStorage.getItem("previewTheme")&&i(),n.click(function(){var e=t.attr("href");e&&0!==e.indexOf("data")?(t.attr("href",""),n.text("主题预览"),localStorage.removeItem("previewTheme")):i()})}(),e(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),e(".popover-demo").popover({selector:'[data-toggle="popover"]',container:"body"}),e(".tooltip-test").tooltip(),e(".popover-test").popover(),e(".docs-popover").popover(),e("#loading-example-btn").on("click",function(){var t=e(this);t.button("loading"),setTimeout(function(){t.button("reset")},3e3)}),e("#exampleModal").on("show.bs.modal",function(t){var n=e(t.relatedTarget),i=n.data("whatever"),o=e(this);o.find(".modal-title").text("New message to "+i),o.find(".modal-body input").val(i)}),e(".docs-activate-animated-progressbar").on("click",function(){e(this).siblings(".progress").find(".progress-bar-striped").toggleClass("active")}),ZeroClipboard.config({moviePath:"source/ZeroClipboard.swf",hoverClass:"btn-clipboard-hover"}),e(".highlight").each(function(){var t='<div class="zero-clipboard"><span class="btn-clipboard">复制</span></div>';e(this).before(t)});var i=new ZeroClipboard(e(".btn-clipboard")),o=e("#global-zeroclipboard-html-bridge");i.on("load",function(){o.data("placement","top").attr("title","复制到剪贴板").tooltip(),i.on("dataRequested",function(t){var n=e(this).parent().nextAll(".highlight").first();t.setText(n.text())}),i.on("complete",function(){o.attr("title","复制成功!").tooltip("fixTitle").tooltip("show").attr("title","复制到剪贴板").tooltip("fixTitle")})}),i.on("noflash wrongflash",function(){e(".zero-clipboard").remove(),ZeroClipboard.destroy()})})}(jQuery),function(){"use strict";anchors.options.placement="left",anchors.add(".docs-section > h1, .docs-section > h2, .docs-section > h3, .docs-section > h4, .docs-section > h5")}();
\ No newline at end of file
+function AnchorJS(e){"use strict";this.options=e||{},this._applyRemainingDefaultOptions=function(e){this.options.icon=this.options.hasOwnProperty("icon")?e.icon:"&#xe9cb",this.options.visible=this.options.hasOwnProperty("visible")?e.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?e.placement:"right",this.options.class=this.options.hasOwnProperty("class")?e.class:""},this._applyRemainingDefaultOptions(e),this.add=function(e){var t,n,i,o,r,a,s,l,c,u,d,f,h,p;if(this._applyRemainingDefaultOptions(this.options),e){if("string"!=typeof e)throw new Error("The selector provided to AnchorJS was invalid.")}else e="h1, h2, h3, h4, h5, h6";if(t=document.querySelectorAll(e),0===t.length)return!1;for(this._addBaselineStyles(),n=document.querySelectorAll("[id]"),i=[].map.call(n,function(e){return e.id}),r=0;r<t.length;r++){if(t[r].hasAttribute("id"))o=t[r].getAttribute("id");else{a=t[r].textContent,s=a.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,32).replace(/^-+|-+$/gm,"").toLowerCase(),u=s,c=0;do{void 0!==l&&(u=s+"-"+c),l=i.indexOf(u),c+=1}while(-1!==l);l=void 0,i.push(u),t[r].setAttribute("id",u),o=u}d=o.replace(/-/g," "),f='<a class="anchorjs-link '+this.options.class+'" href="#'+o+'" aria-label="Anchor link for: '+d+'" data-anchorjs-icon="'+this.options.icon+'"></a>',h=document.createElement("div"),h.innerHTML=f,p=h.childNodes,"always"===this.options.visible&&(p[0].style.opacity="1"),"&#xe9cb"===this.options.icon&&(p[0].style.fontFamily="anchorjs-icons",p[0].style.fontStyle="normal",p[0].style.fontVariant="normal",p[0].style.fontWeight="normal"),"left"===this.options.placement?(p[0].style.position="absolute",p[0].style.marginLeft="-1em",p[0].style.paddingRight="0.5em",t[r].insertBefore(p[0],t[r].firstChild)):(p[0].style.paddingLeft="0.375em",t[r].appendChild(p[0]))}return this},this.remove=function(e){for(var t,n=document.querySelectorAll(e),i=0;i<n.length;i++)(t=n[i].querySelector(".anchorjs-link"))&&n[i].removeChild(t);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var e,t=document.createElement("style");t.className="anchorjs",t.appendChild(document.createTextNode("")),e=document.head.querySelector('[rel="stylesheet"], style'),void 0===e?document.head.appendChild(t):document.head.insertBefore(t,e),t.sheet.insertRule(" .anchorjs-link {   opacity: 0;   text-decoration: none;   -webkit-font-smoothing: antialiased;   -moz-osx-font-smoothing: grayscale; }",t.sheet.cssRules.length),t.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus  {   opacity: 1; }",t.sheet.cssRules.length),t.sheet.insertRule(" [data-anchorjs-icon]::after {   content: attr(data-anchorjs-icon); }",t.sheet.cssRules.length),t.sheet.insertRule(' @font-face {   font-family: "anchorjs-icons";   font-style: normal;   font-weight: normal;   src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',t.sheet.cssRules.length)}}}if(function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"!==n&&!oe.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(fe.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do{e=e[t]}while(e&&1!==e.nodeType);return e}function r(e){var t=be[e]={};return oe.each(e.match(ye)||[],function(e,n){t[n]=!0}),t}function a(){pe.addEventListener?(pe.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1)):(pe.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(pe.addEventListener||"load"===event.type||"complete"===pe.readyState)&&(a(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Te,"-$1").toLowerCase();if("string"==typeof(n=e.getAttribute(i))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ce.test(n)?oe.parseJSON(n):n)}catch(e){}oe.data(e,t,n)}else n=void 0}return n}function c(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(e,t,n,i){if(oe.acceptData(e)){var o,r,a=oe.expando,s=e.nodeType,l=s?oe.cache:e,c=s?e[a]:e[a]&&a;if(c&&l[c]&&(i||l[c].data)||void 0!==n||"string"!=typeof t)return c||(c=s?e[a]=X.pop()||oe.guid++:a),l[c]||(l[c]=s?{}:{toJSON:oe.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[c]=oe.extend(l[c],t):l[c].data=oe.extend(l[c].data,t)),r=l[c],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?null==(o=r[t])&&(o=r[oe.camelCase(t)]):o=r,o}}function d(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,a=r?oe.cache:e,s=r?e[oe.expando]:oe.expando;if(a[s]){if(t&&(i=n?a[s]:a[s].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!c(i):!oe.isEmptyObject(i))return}(n||(delete a[s].data,c(a[s])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function f(){return!0}function h(){return!1}function p(){try{return pe.activeElement}catch(e){}}function g(e){var t=Be.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==we?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==we?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){De.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function A(e){var t=Qe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function w(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),a=oe._data(t,r),s=r.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,o=s[n].length;o>i;i++)oe.event.add(t,n,s[n][i])}a.data&&(a.data=oe.extend({},a.data))}}function C(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,A(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&De.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function T(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function E(e){var t=pe,n=Je[e];return n||(n=T(e,t),"none"!==n&&n||(Ze=(Ze||oe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(Ze[0].contentWindow||Ze[0].contentDocument).document,t.write(),t.close(),n=T(e,t),Ze.detach()),Je[e]=n),n}function k(e,t){return{get:function(){var n=e();if(null!=n)return n?void delete this.get:(this.get=t).apply(this,arguments)}}}function S(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,o=dt.length;o--;)if((t=dt[o]+n)in e)return t;return i}function N(e,t){for(var n,i,o,r=[],a=0,s=e.length;s>a;a++)i=e[a],i.style&&(r[a]=oe._data(i,"olddisplay"),n=i.style.display,t?(r[a]||"none"!==n||(i.style.display=""),""===i.style.display&&Se(i)&&(r[a]=oe._data(i,"olddisplay",E(i.nodeName)))):(o=Se(i),(n&&"none"!==n||!o)&&oe._data(i,"olddisplay",o?n:oe.css(i,"display"))));for(a=0;s>a;a++)i=e[a],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?r[a]||"":"none"));return e}function D(e,t,n){var i=st.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function j(e,t,n,i,o){for(var r=n===(i?"border":"content")?4:"width"===t?1:0,a=0;4>r;r+=2)"margin"===n&&(a+=oe.css(e,n+ke[r],!0,o)),i?("content"===n&&(a-=oe.css(e,"padding"+ke[r],!0,o)),"margin"!==n&&(a-=oe.css(e,"border"+ke[r]+"Width",!0,o))):(a+=oe.css(e,"padding"+ke[r],!0,o),"padding"!==n&&(a+=oe.css(e,"border"+ke[r]+"Width",!0,o)));return a}function $(e,t,n){var i=!0,o="width"===t?e.offsetWidth:e.offsetHeight,r=Ke(e),a=ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,r);if(0>=o||null==o){if(o=et(e,t,r),(0>o||null==o)&&(o=e.style[t]),nt.test(o))return o;i=a&&(ne.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+j(e,t,n||(a?"border":"content"),i,r)+"px"}function L(e,t,n,i,o){return new L.prototype.init(e,t,n,i,o)}function O(){return setTimeout(function(){ft=void 0}),ft=oe.now()}function I(e,t){var n,i={height:e},o=0;for(t=t?1:0;4>o;o+=2-t)n=ke[o],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function B(e,t,n){for(var i,o=(yt[t]||[]).concat(yt["*"]),r=0,a=o.length;a>r;r++)if(i=o[r].call(n,t,e))return i}function R(e,t,n){var i,o,r,a,s,l,c,u=this,d={},f=e.style,h=e.nodeType&&Se(e),p=oe._data(e,"fxshow");n.queue||(s=oe._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,oe.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],c=oe.css(e,"display"),"inline"===("none"===c?oe._data(e,"olddisplay")||E(e.nodeName):c)&&"none"===oe.css(e,"float")&&(ne.inlineBlockNeedsLayout&&"inline"!==E(e.nodeName)?f.zoom=1:f.display="inline-block")),n.overflow&&(f.overflow="hidden",ne.shrinkWrapBlocks()||u.always(function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}));for(i in t)if(o=t[i],pt.exec(o)){if(delete t[i],r=r||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!p||void 0===p[i])continue;h=!0}d[i]=p&&p[i]||oe.style(e,i)}else c=void 0;if(oe.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else{p?"hidden"in p&&(h=p.hidden):p=oe._data(e,"fxshow",{}),r&&(p.hidden=!h),h?oe(e).show():u.done(function(){oe(e).hide()}),u.done(function(){var t;oe._removeData(e,"fxshow");for(t in d)oe.style(e,t,d[t])});for(i in d)a=B(h?p[i]:0,i,u),i in p||(p[i]=a.start,h&&(a.end=a.start,a.start="width"===i||"height"===i?1:0))}}function H(e,t){var n,i,o,r,a;for(n in e)if(i=oe.camelCase(n),o=t[i],r=e[n],oe.isArray(r)&&(o=r[1],r=e[n]=r[0]),n!==i&&(e[i]=r,delete e[n]),(a=oe.cssHooks[i])&&"expand"in a){r=a.expand(r),delete e[i];for(n in r)n in e||(e[n]=r[n],t[n]=o)}else t[i]=o}function M(e,t,n){var i,o,r=0,a=vt.length,s=oe.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var t=ft||O(),n=Math.max(0,c.startTime+c.duration-t),i=n/c.duration||0,r=1-i,a=0,l=c.tweens.length;l>a;a++)c.tweens[a].run(r);return s.notifyWith(e,[c,r,n]),1>r&&l?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:oe.extend({},t),opts:oe.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:ft||O(),duration:n.duration,tweens:[],createTween:function(t,n){var i=oe.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(i),i},stop:function(t){var n=0,i=t?c.tweens.length:0;if(o)return this;for(o=!0;i>n;n++)c.tweens[n].run(1);return t?s.resolveWith(e,[c,t]):s.rejectWith(e,[c,t]),this}}),u=c.props;for(H(u,c.opts.specialEasing);a>r;r++)if(i=vt[r].call(c,e,u,c.opts))return i;return oe.map(u,B,c),oe.isFunction(c.opts.start)&&c.opts.start.call(e,c),oe.fx.timer(oe.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function F(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,r=t.toLowerCase().match(ye)||[];if(oe.isFunction(n))for(;i=r[o++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function P(e,t,n,i){function o(s){var l;return r[s]=!0,oe.each(e[s]||[],function(e,s){var c=s(t,n,i);return"string"!=typeof c||a||r[c]?a?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),l}var r={},a=e===_t;return o(t.dataTypes[0])||!r["*"]&&o("*")}function z(e,t){var n,i,o=oe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((o[i]?e:n||(n={}))[i]=t[i]);return n&&oe.extend(!0,e,n),e}function _(e,t,n){for(var i,o,r,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(a in s)if(s[a]&&s[a].test(o)){l.unshift(a);break}if(l[0]in n)r=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){r=a;break}i||(i=a)}r=r||i}return r?(r!==l[0]&&l.unshift(r),n[r]):void 0}function q(e,t,n,i){var o,r,a,s,l,c={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(r=u.shift();r;)if(e.responseFields[r]&&(n[e.responseFields[r]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(!(a=c[l+" "+r]||c["* "+r]))for(o in c)if(s=o.split(" "),s[1]===r&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(r=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+r}}}return{state:"success",data:t}}function W(e,t,n,i){var o;if(oe.isArray(t))oe.each(t,function(t,o){n||Ut.test(e)?i(e,o):W(e+"["+("object"==typeof o?t:"")+"]",o,n,i)});else if(n||"object"!==oe.type(t))i(e,t);else for(o in t)W(e+"["+o+"]",t[o],n,i)}function U(){try{return new e.XMLHttpRequest}catch(e){}}function Q(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function G(e){return oe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var X=[],V=X.slice,Y=X.concat,Z=X.push,J=X.indexOf,K={},ee=K.toString,te=K.hasOwnProperty,ne={},ie="1.11.3",oe=function(e,t){return new oe.fn.init(e,t)},re=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ae=/^-ms-/,se=/-([\da-z])/gi,le=function(e,t){return t.toUpperCase()};oe.fn=oe.prototype={jquery:ie,constructor:oe,selector:"",length:0,toArray:function(){return V.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:V.call(this)},pushStack:function(e){var t=oe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return oe.each(this,e,t)},map:function(e){return this.pushStack(oe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(V.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Z,sort:X.sort,splice:X.splice},oe.extend=oe.fn.extend=function(){var e,t,n,i,o,r,a=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof a&&(c=a,a=arguments[s]||{},s++),"object"==typeof a||oe.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(o=arguments[s]))for(i in o)e=a[i],n=o[i],a!==n&&(c&&n&&(oe.isPlainObject(n)||(t=oe.isArray(n)))?(t?(t=!1,r=e&&oe.isArray(e)?e:[]):r=e&&oe.isPlainObject(e)?e:{},a[i]=oe.extend(c,r,n)):void 0!==n&&(a[i]=n));return a},oe.extend({expando:"jQuery"+(ie+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===oe.type(e)},isArray:Array.isArray||function(e){return"array"===oe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!oe.isArray(e)&&e-parseFloat(e)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==oe.type(e)||e.nodeType||oe.isWindow(e))return!1;try{if(e.constructor&&!te.call(e,"constructor")&&!te.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(ne.ownLast)for(t in e)return te.call(e,t);for(t in e);return void 0===t||te.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?K[ee.call(e)]||"object":typeof e},globalEval:function(t){t&&oe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ae,"ms-").replace(se,le)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,i){var o=0,r=e.length,a=n(e);if(i){if(a)for(;r>o&&!1!==t.apply(e[o],i);o++);else for(o in e)if(!1===t.apply(e[o],i))break}else if(a)for(;r>o&&!1!==t.call(e[o],o,e[o]);o++);else for(o in e)if(!1===t.call(e[o],o,e[o]))break;return e},trim:function(e){return null==e?"":(e+"").replace(re,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?oe.merge(i,"string"==typeof e?[e]:e):Z.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(J)return J.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,o=e.length;n>i;)e[o++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[o++]=t[i++];return e.length=o,e},grep:function(e,t,n){for(var i=[],o=0,r=e.length,a=!n;r>o;o++)!t(e[o],o)!==a&&i.push(e[o]);return i},map:function(e,t,i){var o,r=0,a=e.length,s=n(e),l=[];if(s)for(;a>r;r++)null!=(o=t(e[r],r,i))&&l.push(o);else for(r in e)null!=(o=t(e[r],r,i))&&l.push(o);return Y.apply([],l)},guid:1,proxy:function(e,t){var n,i,o;return"string"==typeof t&&(o=e[t],t=e,e=o),oe.isFunction(e)?(n=V.call(arguments,2),i=function(){return e.apply(t||this,n.concat(V.call(arguments)))},i.guid=e.guid=e.guid||oe.guid++,i):void 0},now:function(){return+new Date},support:ne}),oe.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){K["[object "+t+"]"]=t.toLowerCase()});var ce=function(e){function t(e,t,n,i){var o,r,a,s,c,d,f,h,p,g;if((t?t.ownerDocument||t:M)!==j&&D(t),t=t||j,n=n||[],s=t.nodeType,"string"!=typeof e||!e||1!==s&&9!==s&&11!==s)return n;if(!i&&L){if(11!==s&&(o=me.exec(e)))if(a=o[1]){if(9===s){if(!(r=t.getElementById(a))||!r.parentNode)return n;if(r.id===a)return n.push(r),n}else if(t.ownerDocument&&(r=t.ownerDocument.getElementById(a))&&R(t,r)&&r.id===a)return n.push(r),n}else{if(o[2])return Y.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&b.getElementsByClassName)return Y.apply(n,t.getElementsByClassName(a)),n}if(b.qsa&&(!O||!O.test(e))){if(h=f=H,p=t,g=1!==s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(d=C(e),(f=t.getAttribute("id"))?h=f.replace(ye,"\\$&"):t.setAttribute("id",h),h="[id='"+h+"'] ",c=d.length;c--;)d[c]=h+u(d[c]);p=ve.test(e)&&l(t.parentNode)||t,g=d.join(",")}if(g)try{return Y.apply(n,p.querySelectorAll(g)),n}catch(e){}finally{f||t.removeAttribute("id")}}}return E(e.replace(ae,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>A.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[H]=!0,e}function o(e){var t=j.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function r(e,t){for(var n=e.split("|"),i=e.length;i--;)A.attrHandle[n[i]]=t}function a(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return i(function(t){return t=+t,i(function(n,i){for(var o,r=e([],n.length,t),a=r.length;a--;)n[o=r[a]]&&(n[o]=!(i[o]=n[o]))})})}function l(e){return e&&void 0!==e.getElementsByTagName&&e}function c(){}function u(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function d(e,t,n){var i=t.dir,o=n&&"parentNode"===i,r=P++;return t.first?function(t,n,r){for(;t=t[i];)if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var s,l,c=[F,r];if(a){for(;t=t[i];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[i];)if(1===t.nodeType||o){if(l=t[H]||(t[H]={}),(s=l[i])&&s[0]===F&&s[1]===r)return c[2]=s[2];if(l[i]=c,c[2]=e(t,n,a))return!0}}}function f(e){return e.length>1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function h(e,n,i){for(var o=0,r=n.length;r>o;o++)t(e,n[o],i);return i}function p(e,t,n,i,o){for(var r,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(r=e[s])&&(!n||n(r,i,o))&&(a.push(r),c&&t.push(s));return a}function g(e,t,n,o,r,a){return o&&!o[H]&&(o=g(o)),r&&!r[H]&&(r=g(r,a)),i(function(i,a,s,l){var c,u,d,f=[],g=[],m=a.length,v=i||h(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?v:p(v,f,e,s,l),b=n?r||(i?e:m||o)?[]:a:y;if(n&&n(y,b,s,l),o)for(c=p(b,g),o(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[g[u]]=!(y[g[u]]=d));if(i){if(r||e){if(r){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);r(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=r?J(i,d):f[u])>-1&&(i[c]=!(a[c]=d))}}else b=p(b===a?b.splice(m,b.length):b),r?r(null,a,b,l):Y.apply(a,b)})}function m(e){for(var t,n,i,o=e.length,r=A.relative[e[0].type],a=r||A.relative[" "],s=r?1:0,l=d(function(e){return e===t},a,!0),c=d(function(e){return J(t,e)>-1},a,!0),h=[function(e,n,i){var o=!r&&(i||n!==k)||((t=n).nodeType?l(e,n,i):c(e,n,i));return t=null,o}];o>s;s++)if(n=A.relative[e[s].type])h=[d(f(h),n)];else{if(n=A.filter[e[s].type].apply(null,e[s].matches),n[H]){for(i=++s;o>i&&!A.relative[e[i].type];i++);return g(s>1&&f(h),s>1&&u(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ae,"$1"),n,i>s&&m(e.slice(s,i)),o>i&&m(e=e.slice(i)),o>i&&u(e))}h.push(n)}return f(h)}function v(e,n){var o=n.length>0,r=e.length>0,a=function(i,a,s,l,c){var u,d,f,h=0,g="0",m=i&&[],v=[],y=k,b=i||r&&A.find.TAG("*",c),x=F+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=a!==j&&a);g!==w&&null!=(u=b[g]);g++){if(r&&u){for(d=0;f=e[d++];)if(f(u,a,s)){l.push(u);break}c&&(F=x)}o&&((u=!f&&u)&&h--,i&&m.push(u))}if(h+=g,o&&g!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(i){if(h>0)for(;g--;)m[g]||v[g]||(v[g]=X.call(l));v=p(v)}Y.apply(l,v),c&&!i&&v.length>0&&h+n.length>1&&t.uniqueSort(l)}return c&&(F=x,k=y),m};return o?i(a):a}var y,b,A,x,w,C,T,E,k,S,N,D,j,$,L,O,I,B,R,H="sizzle"+1*new Date,M=e.document,F=0,P=0,z=n(),_=n(),q=n(),W=function(e,t){return e===t&&(N=!0),0},U=1<<31,Q={}.hasOwnProperty,G=[],X=G.pop,V=G.push,Y=G.push,Z=G.slice,J=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ee="[\\x20\\t\\r\\n\\f]",te="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ne=te.replace("w","w#"),ie="\\["+ee+"*("+te+")(?:"+ee+"*([*^$|!~]?=)"+ee+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ne+"))|)"+ee+"*\\]",oe=":("+te+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",re=new RegExp(ee+"+","g"),ae=new RegExp("^"+ee+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ee+"+$","g"),se=new RegExp("^"+ee+"*,"+ee+"*"),le=new RegExp("^"+ee+"*([>+~]|"+ee+")"+ee+"*"),ce=new RegExp("="+ee+"*([^\\]'\"]*?)"+ee+"*\\]","g"),ue=new RegExp(oe),de=new RegExp("^"+ne+"$"),fe={ID:new RegExp("^#("+te+")"),CLASS:new RegExp("^\\.("+te+")"),TAG:new RegExp("^("+te.replace("w","w*")+")"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ee+"*(even|odd|(([+-]|)(\\d*)n|)"+ee+"*(?:([+-]|)"+ee+"*(\\d+)|))"+ee+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+ee+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ee+"*((?:-\\d)?\\d*)"+ee+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,pe=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,ye=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ee+"?|("+ee+")|.)","ig"),Ae=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},xe=function(){D()};try{Y.apply(G=Z.call(M.childNodes),M.childNodes),G[M.childNodes.length].nodeType}catch(e){Y={apply:G.length?function(e,t){V.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}b=t.support={},w=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},D=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:M;return i!==j&&9===i.nodeType&&i.documentElement?(j=i,$=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",xe,!1):n.attachEvent&&n.attachEvent("onunload",xe)),L=!w(i),b.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByTagName=o(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),b.getElementsByClassName=ge.test(i.getElementsByClassName),b.getById=o(function(e){return $.appendChild(e).id=H,!i.getElementsByName||!i.getElementsByName(H).length}),b.getById?(A.find.ID=function(e,t){if(void 0!==t.getElementById&&L){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},A.filter.ID=function(e){var t=e.replace(be,Ae);return function(e){return e.getAttribute("id")===t}}):(delete A.find.ID,A.filter.ID=function(e){var t=e.replace(be,Ae);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),A.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,r=t.getElementsByTagName(e);if("*"===e){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},A.find.CLASS=b.getElementsByClassName&&function(e,t){return L?t.getElementsByClassName(e):void 0},I=[],O=[],(b.qsa=ge.test(i.querySelectorAll))&&(o(function(e){$.appendChild(e).innerHTML="<a id='"+H+"'></a><select id='"+H+"-\f]' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ee+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ee+"*(?:value|"+K+")"),e.querySelectorAll("[id~="+H+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+H+"+*").length||O.push(".#.+[+~]")}),o(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ee+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(b.matchesSelector=ge.test(B=$.matches||$.webkitMatchesSelector||$.mozMatchesSelector||$.oMatchesSelector||$.msMatchesSelector))&&o(function(e){b.disconnectedMatch=B.call(e,"div"),B.call(e,"[s!='']:x"),I.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),I=I.length&&new RegExp(I.join("|")),t=ge.test($.compareDocumentPosition),R=t||ge.test($.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},W=t?function(e,t){if(e===t)return N=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===i||e.ownerDocument===M&&R(M,e)?-1:t===i||t.ownerDocument===M&&R(M,t)?1:S?J(S,e)-J(S,t):0:4&n?-1:1)}:function(e,t){if(e===t)return N=!0,0;var n,o=0,r=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!r||!s)return e===i?-1:t===i?1:r?-1:s?1:S?J(S,e)-J(S,t):0;if(r===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[o]===c[o];)o++;return o?a(l[o],c[o]):l[o]===M?-1:c[o]===M?1:0},i):j},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==j&&D(e),n=n.replace(ce,"='$1']"),!(!b.matchesSelector||!L||I&&I.test(n)||O&&O.test(n)))try{var i=B.call(e,n);if(i||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,j,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==j&&D(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==j&&D(e);var n=A.attrHandle[t.toLowerCase()],i=n&&Q.call(A.attrHandle,t.toLowerCase())?n(e,t,!L):void 0;return void 0!==i?i:b.attributes||!L?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,o=0;if(N=!b.detectDuplicates,S=!b.sortStable&&e.slice(0),e.sort(W),N){for(;t=e[o++];)t===e[o]&&(i=n.push(o));for(;i--;)e.splice(n[i],1)}return S=null,e},x=t.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=x(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=x(t);return n},A=t.selectors={cacheLength:50,createPseudo:i,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,Ae),e[3]=(e[3]||e[4]||e[5]||"").replace(be,Ae),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ue.test(n)&&(t=C(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),
+e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,Ae).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ee+")"+e+"("+ee+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(o){var r=t.attr(o,e);return null==r?"!="===n:!n||(r+="","="===n?r===i:"!="===n?r!==i:"^="===n?i&&0===r.indexOf(i):"*="===n?i&&r.indexOf(i)>-1:"$="===n?i&&r.slice(-i.length)===i:"~="===n?(" "+r.replace(re," ")+" ").indexOf(i)>-1:"|="===n&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,o){var r="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,g=r!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(r){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?m.firstChild:m.lastChild],a&&y){for(u=m[H]||(m[H]={}),c=u[e]||[],h=c[0]===F&&c[1],f=c[0]===F&&c[2],d=h&&m.childNodes[h];d=++h&&d&&d[g]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[F,h,f];break}}else if(y&&(c=(t[H]||(t[H]={}))[e])&&c[0]===F)f=c[1];else for(;(d=++h&&d&&d[g]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[H]||(d[H]={}))[e]=[F,f]),d!==t)););return(f-=o)===i||f%i==0&&f/i>=0}}},PSEUDO:function(e,n){var o,r=A.pseudos[e]||A.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return r[H]?r(n):r.length>1?(o=[e,e,"",n],A.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,o=r(e,n),a=o.length;a--;)i=J(e,o[a]),e[i]=!(t[i]=o[a])}):function(e){return r(e,0,o)}):r}},pseudos:{not:i(function(e){var t=[],n=[],o=T(e.replace(ae,"$1"));return o[H]?i(function(e,t,n,i){for(var r,a=o(e,null,i,[]),s=e.length;s--;)(r=a[s])&&(e[s]=!(t[s]=r))}):function(e,i,r){return t[0]=e,o(t,null,r,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(be,Ae),function(t){return(t.textContent||t.innerText||x(t)).indexOf(e)>-1}}),lang:i(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,Ae).toLowerCase(),function(t){var n;do{if(n=L?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===$},focus:function(e){return e===j.activeElement&&(!j.hasFocus||j.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!A.pseudos.empty(e)},header:function(e){return pe.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:s(function(){return[0]}),last:s(function(e,t){return[t-1]}),eq:s(function(e,t,n){return[0>n?n+t:n]}),even:s(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:s(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:s(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:s(function(e,t,n){for(var i=0>n?n+t:n;++i<t;)e.push(i);return e})}},A.pseudos.nth=A.pseudos.eq;for(y in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})A.pseudos[y]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}(y);for(y in{submit:!0,reset:!0})A.pseudos[y]=function(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}(y);return c.prototype=A.filters=A.pseudos,A.setFilters=new c,C=t.tokenize=function(e,n){var i,o,r,a,s,l,c,u=_[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=A.preFilter;s;){(!i||(o=se.exec(s)))&&(o&&(s=s.slice(o[0].length)||s),l.push(r=[])),i=!1,(o=le.exec(s))&&(i=o.shift(),r.push({value:i,type:o[0].replace(ae," ")}),s=s.slice(i.length));for(a in A.filter)!(o=fe[a].exec(s))||c[a]&&!(o=c[a](o))||(i=o.shift(),r.push({value:i,type:a,matches:o}),s=s.slice(i.length));if(!i)break}return n?s.length:s?t.error(e):_(e,l).slice(0)},T=t.compile=function(e,t){var n,i=[],o=[],r=q[e+" "];if(!r){for(t||(t=C(e)),n=t.length;n--;)r=m(t[n]),r[H]?i.push(r):o.push(r);r=q(e,v(o,i)),r.selector=e}return r},E=t.select=function(e,t,n,i){var o,r,a,s,c,d="function"==typeof e&&e,f=!i&&C(e=d.selector||e);if(n=n||[],1===f.length){if(r=f[0]=f[0].slice(0),r.length>2&&"ID"===(a=r[0]).type&&b.getById&&9===t.nodeType&&L&&A.relative[r[1].type]){if(!(t=(A.find.ID(a.matches[0].replace(be,Ae),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(r.shift().value.length)}for(o=fe.needsContext.test(e)?0:r.length;o--&&(a=r[o],!A.relative[s=a.type]);)if((c=A.find[s])&&(i=c(a.matches[0].replace(be,Ae),ve.test(r[0].type)&&l(t.parentNode)||t))){if(r.splice(o,1),!(e=i.length&&u(r)))return Y.apply(n,i),n;break}}return(d||T(e,f))(i,t,!L,n,ve.test(e)&&l(t.parentNode)||t),n},b.sortStable=H.split("").sort(W).join("")===H,b.detectDuplicates=!!N,D(),b.sortDetached=o(function(e){return 1&e.compareDocumentPosition(j.createElement("div"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||r("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),b.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||r("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||r(K,function(e,t,n){var i;return n?void 0:!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);oe.find=ce,oe.expr=ce.selectors,oe.expr[":"]=oe.expr.pseudos,oe.unique=ce.uniqueSort,oe.text=ce.getText,oe.isXMLDoc=ce.isXML,oe.contains=ce.contains;var ue=oe.expr.match.needsContext,de=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,fe=/^.[^:#\[\.,]*$/;oe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?oe.find.matchesSelector(i,e)?[i]:[]:oe.find.matches(e,oe.grep(t,function(e){return 1===e.nodeType}))},oe.fn.extend({find:function(e){var t,n=[],i=this,o=i.length;if("string"!=typeof e)return this.pushStack(oe(e).filter(function(){for(t=0;o>t;t++)if(oe.contains(i[t],this))return!0}));for(t=0;o>t;t++)oe.find(e,i[t],n);return n=this.pushStack(o>1?oe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&ue.test(e)?oe(e):e||[],!1).length}});var he,pe=e.document,ge=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(oe.fn.init=function(e,t){var n,i;if(!e)return this;if("string"==typeof e){if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ge.exec(e))||!n[1]&&t)return!t||t.jquery?(t||he).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof oe?t[0]:t,oe.merge(this,oe.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:pe,!0)),de.test(n[1])&&oe.isPlainObject(t))for(n in t)oe.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((i=pe.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return he.find(e);this.length=1,this[0]=i}return this.context=pe,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):oe.isFunction(e)?void 0!==he.ready?he.ready(e):e(oe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),oe.makeArray(e,this))}).prototype=oe.fn,he=oe(pe);var me=/^(?:parents|prev(?:Until|All))/,ve={children:!0,contents:!0,next:!0,prev:!0};oe.extend({dir:function(e,t,n){for(var i=[],o=e[t];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!oe(o).is(n));)1===o.nodeType&&i.push(o),o=o[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),oe.fn.extend({has:function(e){var t,n=oe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(oe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,o=this.length,r=[],a=ue.test(e)||"string"!=typeof e?oe(e,t||this.context):0;o>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&oe.find.matchesSelector(n,e))){r.push(n);break}return this.pushStack(r.length>1?oe.unique(r):r)},index:function(e){return e?"string"==typeof e?oe.inArray(this[0],oe(e)):oe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(oe.unique(oe.merge(this.get(),oe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),oe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return oe.dir(e,"parentNode")},parentsUntil:function(e,t,n){return oe.dir(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return oe.dir(e,"nextSibling")},prevAll:function(e){return oe.dir(e,"previousSibling")},nextUntil:function(e,t,n){return oe.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return oe.dir(e,"previousSibling",n)},siblings:function(e){return oe.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return oe.sibling(e.firstChild)},contents:function(e){return oe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:oe.merge([],e.childNodes)}},function(e,t){oe.fn[e]=function(n,i){var o=oe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=oe.filter(i,o)),this.length>1&&(ve[e]||(o=oe.unique(o)),me.test(e)&&(o=o.reverse())),this.pushStack(o)}});var ye=/\S+/g,be={};oe.Callbacks=function(e){e="string"==typeof e?be[e]||r(e):oe.extend({},e);var t,n,i,o,a,s,l=[],c=!e.once&&[],u=function(r){for(n=e.memory&&r,i=!0,a=s||0,s=0,o=l.length,t=!0;l&&o>a;a++)if(!1===l[a].apply(r[0],r[1])&&e.stopOnFalse){n=!1;break}t=!1,l&&(c?c.length&&u(c.shift()):n?l=[]:d.disable())},d={add:function(){if(l){var i=l.length;!function t(n){oe.each(n,function(n,i){var o=oe.type(i);"function"===o?e.unique&&d.has(i)||l.push(i):i&&i.length&&"string"!==o&&t(i)})}(arguments),t?o=l.length:n&&(s=i,u(n))}return this},remove:function(){return l&&oe.each(arguments,function(e,n){for(var i;(i=oe.inArray(n,l,i))>-1;)l.splice(i,1),t&&(o>=i&&o--,a>=i&&a--)}),this},has:function(e){return e?oe.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=c=n=void 0,this},disabled:function(){return!l},lock:function(){return c=void 0,n||d.disable(),this},locked:function(){return!c},fireWith:function(e,n){return!l||i&&!c||(n=n||[],n=[e,n.slice?n.slice():n],t?c.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},oe.extend({Deferred:function(e){var t=[["resolve","done",oe.Callbacks("once memory"),"resolved"],["reject","fail",oe.Callbacks("once memory"),"rejected"],["notify","progress",oe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return oe.Deferred(function(n){oe.each(t,function(t,r){var a=oe.isFunction(e[t])&&e[t];o[r[1]](function(){var e=a&&a.apply(this,arguments);e&&oe.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[r[0]+"With"](this===i?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?oe.extend(e,i):i}},o={};return i.pipe=i.then,oe.each(t,function(e,r){var a=r[2],s=r[3];i[r[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),o[r[0]]=function(){return o[r[0]+"With"](this===o?i:this,arguments),this},o[r[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,i,o=0,r=V.call(arguments),a=r.length,s=1!==a||e&&oe.isFunction(e.promise)?a:0,l=1===s?e:oe.Deferred(),c=function(e,n,i){return function(o){n[e]=this,i[e]=arguments.length>1?V.call(arguments):o,i===t?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(a>1)for(t=new Array(a),n=new Array(a),i=new Array(a);a>o;o++)r[o]&&oe.isFunction(r[o].promise)?r[o].promise().done(c(o,i,r)).fail(l.reject).progress(c(o,n,t)):--s;return s||l.resolveWith(i,r),l.promise()}});var Ae;oe.fn.ready=function(e){return oe.ready.promise().done(e),this},oe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?oe.readyWait++:oe.ready(!0)},ready:function(e){if(!0===e?!--oe.readyWait:!oe.isReady){if(!pe.body)return setTimeout(oe.ready);oe.isReady=!0,!0!==e&&--oe.readyWait>0||(Ae.resolveWith(pe,[oe]),oe.fn.triggerHandler&&(oe(pe).triggerHandler("ready"),oe(pe).off("ready")))}}}),oe.ready.promise=function(t){if(!Ae)if(Ae=oe.Deferred(),"complete"===pe.readyState)setTimeout(oe.ready);else if(pe.addEventListener)pe.addEventListener("DOMContentLoaded",s,!1),e.addEventListener("load",s,!1);else{pe.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&pe.documentElement}catch(e){}n&&n.doScroll&&function e(){if(!oe.isReady){try{n.doScroll("left")}catch(t){return setTimeout(e,50)}a(),oe.ready()}}()}return Ae.promise(t)};var xe,we="undefined";for(xe in oe(ne))break;ne.ownLast="0"!==xe,ne.inlineBlockNeedsLayout=!1,oe(function(){var e,t,n,i;(n=pe.getElementsByTagName("body")[0])&&n.style&&(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==we&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ne.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=pe.createElement("div");if(null==ne.deleteExpando){ne.deleteExpando=!0;try{delete e.test}catch(e){ne.deleteExpando=!1}}e=null}(),oe.acceptData=function(e){var t=oe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||!0!==t&&e.getAttribute("classid")===t)};var Ce=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Te=/([A-Z])/g;oe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return!!(e=e.nodeType?oe.cache[e[oe.expando]]:e[oe.expando])&&!c(e)},data:function(e,t,n){return u(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return u(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),oe.fn.extend({data:function(e,t){var n,i,o,r=this[0],a=r&&r.attributes;if(void 0===e){if(this.length&&(o=oe.data(r),1===r.nodeType&&!oe._data(r,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(i=a[n].name,0===i.indexOf("data-")&&(i=oe.camelCase(i.slice(5)),l(r,i,o[i])));oe._data(r,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){oe.data(this,e)}):arguments.length>1?this.each(function(){oe.data(this,e,t)}):r?l(r,e,oe.data(r,e)):void 0},removeData:function(e){return this.each(function(){oe.removeData(this,e)})}}),oe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=oe._data(e,t),n&&(!i||oe.isArray(n)?i=oe._data(e,t,oe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=oe.queue(e,t),i=n.length,o=n.shift(),r=oe._queueHooks(e,t),a=function(){oe.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete r.stop,o.call(e,a,r)),!i&&r&&r.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return oe._data(e,n)||oe._data(e,n,{empty:oe.Callbacks("once memory").add(function(){oe._removeData(e,t+"queue"),oe._removeData(e,n)})})}}),oe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?oe.queue(this[0],e):void 0===t?this:this.each(function(){var n=oe.queue(this,e,t);oe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&oe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){oe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,o=oe.Deferred(),r=this,a=this.length,s=function(){--i||o.resolveWith(r,[r])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=oe._data(r[a],e+"queueHooks"))&&n.empty&&(i++,n.empty.add(s));return s(),o.promise(t)}});var Ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ke=["Top","Right","Bottom","Left"],Se=function(e,t){return e=t||e,"none"===oe.css(e,"display")||!oe.contains(e.ownerDocument,e)},Ne=oe.access=function(e,t,n,i,o,r,a){var s=0,l=e.length,c=null==n;if("object"===oe.type(n)){o=!0;for(s in n)oe.access(e,t,s,n[s],!0,r,a)}else if(void 0!==i&&(o=!0,oe.isFunction(i)||(a=!0),c&&(a?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(oe(e),n)})),t))for(;l>s;s++)t(e[s],n,a?i:i.call(e[s],s,t(e[s],n)));return o?e:c?t.call(e):l?t(e[0],n):r},De=/^(?:checkbox|radio)$/i;!function(){var e=pe.createElement("input"),t=pe.createElement("div"),n=pe.createDocumentFragment();if(t.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ne.leadingWhitespace=3===t.firstChild.nodeType,ne.tbody=!t.getElementsByTagName("tbody").length,ne.htmlSerialize=!!t.getElementsByTagName("link").length,ne.html5Clone="<:nav></:nav>"!==pe.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),ne.appendChecked=e.checked,t.innerHTML="<textarea>x</textarea>",ne.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="<input type='radio' checked='checked' name='t'/>",ne.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,ne.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){ne.noCloneEvent=!1}),t.cloneNode(!0).click()),null==ne.deleteExpando){ne.deleteExpando=!0;try{delete t.test}catch(e){ne.deleteExpando=!1}}}(),function(){var t,n,i=pe.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(ne[t+"Bubbles"]=n in e)||(i.setAttribute(n,"t"),ne[t+"Bubbles"]=!1===i.attributes[n].expando);i=null}();var je=/^(?:input|select|textarea)$/i,$e=/^key/,Le=/^(?:mouse|pointer|contextmenu)|click/,Oe=/^(?:focusinfocus|focusoutblur)$/,Ie=/^([^.]*)(?:\.(.+)|)$/;oe.event={global:{},add:function(e,t,n,i,o){var r,a,s,l,c,u,d,f,h,p,g,m=oe._data(e);if(m){for(n.handler&&(l=n,n=l.handler,o=l.selector),n.guid||(n.guid=oe.guid++),(a=m.events)||(a=m.events={}),(u=m.handle)||(u=m.handle=function(e){return typeof oe===we||e&&oe.event.triggered===e.type?void 0:oe.event.dispatch.apply(u.elem,arguments)},u.elem=e),t=(t||"").match(ye)||[""],s=t.length;s--;)r=Ie.exec(t[s])||[],h=g=r[1],p=(r[2]||"").split(".").sort(),h&&(c=oe.event.special[h]||{},h=(o?c.delegateType:c.bindType)||h,c=oe.event.special[h]||{},d=oe.extend({type:h,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&oe.expr.match.needsContext.test(o),namespace:p.join(".")},l),(f=a[h])||(f=a[h]=[],f.delegateCount=0,c.setup&&!1!==c.setup.call(e,i,p,u)||(e.addEventListener?e.addEventListener(h,u,!1):e.attachEvent&&e.attachEvent("on"+h,u))),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,d):f.push(d),oe.event.global[h]=!0);e=null}},remove:function(e,t,n,i,o){var r,a,s,l,c,u,d,f,h,p,g,m=oe.hasData(e)&&oe._data(e);if(m&&(u=m.events)){for(t=(t||"").match(ye)||[""],c=t.length;c--;)if(s=Ie.exec(t[c])||[],h=g=s[1],p=(s[2]||"").split(".").sort(),h){for(d=oe.event.special[h]||{},h=(i?d.delegateType:d.bindType)||h,f=u[h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=r=f.length;r--;)a=f[r],!o&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||i&&i!==a.selector&&("**"!==i||!a.selector)||(f.splice(r,1),a.selector&&f.delegateCount--,d.remove&&d.remove.call(e,a));l&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,p,m.handle)||oe.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)oe.event.remove(e,h+t[c],n,i,!0);oe.isEmptyObject(u)&&(delete m.handle,oe._removeData(e,"events"))}},trigger:function(t,n,i,o){var r,a,s,l,c,u,d,f=[i||pe],h=te.call(t,"type")?t.type:t,p=te.call(t,"namespace")?t.namespace.split("."):[];if(s=u=i=i||pe,3!==i.nodeType&&8!==i.nodeType&&!Oe.test(h+oe.event.triggered)&&(h.indexOf(".")>=0&&(p=h.split("."),h=p.shift(),p.sort()),a=h.indexOf(":")<0&&"on"+h,t=t[oe.expando]?t:new oe.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=p.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:oe.makeArray(n,[t]),c=oe.event.special[h]||{},o||!c.trigger||!1!==c.trigger.apply(i,n))){if(!o&&!c.noBubble&&!oe.isWindow(i)){for(l=c.delegateType||h,Oe.test(l+h)||(s=s.parentNode);s;s=s.parentNode)f.push(s),u=s;u===(i.ownerDocument||pe)&&f.push(u.defaultView||u.parentWindow||e)}for(d=0;(s=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:c.bindType||h,r=(oe._data(s,"events")||{})[t.type]&&oe._data(s,"handle"),r&&r.apply(s,n),(r=a&&s[a])&&r.apply&&oe.acceptData(s)&&(t.result=r.apply(s,n),!1===t.result&&t.preventDefault());if(t.type=h,!o&&!t.isDefaultPrevented()&&(!c._default||!1===c._default.apply(f.pop(),n))&&oe.acceptData(i)&&a&&i[h]&&!oe.isWindow(i)){u=i[a],u&&(i[a]=null),oe.event.triggered=h;try{i[h]()}catch(e){}oe.event.triggered=void 0,u&&(i[a]=u)}return t.result}},dispatch:function(e){e=oe.event.fix(e);var t,n,i,o,r,a=[],s=V.call(arguments),l=(oe._data(this,"events")||{})[e.type]||[],c=oe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(a=oe.event.handlers.call(this,e,l),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(i=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,void 0!==(n=((oe.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,s))&&!1===(e.result=n)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,o,r,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(!0!==l.disabled||"click"!==e.type)){for(o=[],r=0;s>r;r++)i=t[r],n=i.selector+" ",void 0===o[n]&&(o[n]=i.needsContext?oe(n,this).index(l)>=0:oe.find(n,this,null,[l]).length),o[n]&&o.push(i);o.length&&a.push({elem:l,handlers:o})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},fix:function(e){if(e[oe.expando])return e;var t,n,i,o=e.type,r=e,a=this.fixHooks[o];for(a||(this.fixHooks[o]=a=Le.test(o)?this.mouseHooks:$e.test(o)?this.keyHooks:{}),i=a.props?this.props.concat(a.props):this.props,e=new oe.Event(r),t=i.length;t--;)n=i[t],e[n]=r[n];return e.target||(e.target=r.srcElement||pe),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,a.filter?a.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,o,r=t.button,a=t.fromElement;return null==e.pageX&&null!=t.clientX&&(i=e.target.ownerDocument||pe,o=i.documentElement,n=i.body,e.pageX=t.clientX+(o&&o.scrollLeft||n&&n.scrollLeft||0)-(o&&o.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||n&&n.scrollTop||0)-(o&&o.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?t.toElement:a),e.which||void 0===r||(e.which=1&r?1:2&r?3:4&r?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==p()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===p()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return oe.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(e){return oe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,i){var o=oe.extend(new oe.Event,n,{type:e,isSimulated:!0,originalEvent:{}});i?oe.event.trigger(o,null,t):oe.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},oe.removeEvent=pe.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var i="on"+t;e.detachEvent&&(typeof e[i]===we&&(e[i]=null),e.detachEvent(i,n))},oe.Event=function(e,t){return this instanceof oe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?f:h):this.type=e,t&&oe.extend(this,t),this.timeStamp=e&&e.timeStamp||oe.now(),void(this[oe.expando]=!0)):new oe.Event(e,t)},oe.Event.prototype={isDefaultPrevented:h,isPropagationStopped:h,isImmediatePropagationStopped:h,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=f,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=f,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=f,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},oe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){oe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,o=e.relatedTarget,r=e.handleObj;return(!o||o!==i&&!oe.contains(i,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}}),ne.submitBubbles||(oe.event.special.submit={setup:function(){return!oe.nodeName(this,"form")&&void oe.event.add(this,"click._submit keypress._submit",function(e){var t=e.target,n=oe.nodeName(t,"input")||oe.nodeName(t,"button")?t.form:void 0;n&&!oe._data(n,"submitBubbles")&&(oe.event.add(n,"submit._submit",function(e){e._submit_bubble=!0}),oe._data(n,"submitBubbles",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&oe.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return!oe.nodeName(this,"form")&&void oe.event.remove(this,"._submit")}}),ne.changeBubbles||(oe.event.special.change={setup:function(){return je.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(oe.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),oe.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),oe.event.simulate("change",this,e,!0)})),!1):void oe.event.add(this,"beforeactivate._change",function(e){var t=e.target;je.test(t.nodeName)&&!oe._data(t,"changeBubbles")&&(oe.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||oe.event.simulate("change",this.parentNode,e,!0)}),oe._data(t,"changeBubbles",!0))})},handle:function(e){var t=e.target;return this!==t||e.isSimulated||e.isTrigger||"radio"!==t.type&&"checkbox"!==t.type?e.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return oe.event.remove(this,"._change"),!je.test(this.nodeName)}}),ne.focusinBubbles||oe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){oe.event.simulate(t,e.target,oe.event.fix(e),!0)};oe.event.special[t]={setup:function(){var i=this.ownerDocument||this,o=oe._data(i,t);o||i.addEventListener(e,n,!0),oe._data(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=oe._data(i,t)-1;o?oe._data(i,t,o):(i.removeEventListener(e,n,!0),oe._removeData(i,t))}}}),oe.fn.extend({on:function(e,t,n,i,o){var r,a;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=void 0);for(r in e)this.on(r,t,n,e[r],o);return this}if(null==n&&null==i?(i=t,n=t=void 0):null==i&&("string"==typeof t?(i=n,n=void 0):(i=n,n=t,t=void 0)),!1===i)i=h;else if(!i)return this;return 1===o&&(a=i,i=function(e){return oe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=oe.guid++)),this.each(function(){oe.event.add(this,e,i,n,t)})},one:function(e,t,n,i){return this.on(e,t,n,i,1)},off:function(e,t,n){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,oe(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=h),this.each(function(){oe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){oe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?oe.event.trigger(e,t,n,!0):void 0}});var Be="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Re=/ jQuery\d+="(?:null|\d+)"/g,He=new RegExp("<(?:"+Be+")[\\s/>]","i"),Me=/^\s+/,Fe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Pe=/<([\w:]+)/,ze=/<tbody/i,_e=/<|&#?\w+;/,qe=/<(?:script|style|link)/i,We=/checked\s*(?:[^=]|=\s*.checked.)/i,Ue=/^$|\/(?:java|ecma)script/i,Qe=/^true\/(.*)/,Ge=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Xe={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ne.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Ve=g(pe),Ye=Ve.appendChild(pe.createElement("div"));Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td,oe.extend({clone:function(e,t,n){var i,o,r,a,s,l=oe.contains(e.ownerDocument,e);if(ne.html5Clone||oe.isXMLDoc(e)||!He.test("<"+e.nodeName+">")?r=e.cloneNode(!0):(Ye.innerHTML=e.outerHTML,Ye.removeChild(r=Ye.firstChild)),!(ne.noCloneEvent&&ne.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||oe.isXMLDoc(e)))for(i=m(r),s=m(e),a=0;null!=(o=s[a]);++a)i[a]&&C(o,i[a]);if(t)if(n)for(s=s||m(e),i=i||m(r),a=0;null!=(o=s[a]);a++)w(o,i[a]);else w(e,r);return i=m(r,"script"),i.length>0&&x(i,!l&&m(e,"script")),i=s=o=null,r},buildFragment:function(e,t,n,i){for(var o,r,a,s,l,c,u,d=e.length,f=g(t),h=[],p=0;d>p;p++)if((r=e[p])||0===r)if("object"===oe.type(r))oe.merge(h,r.nodeType?[r]:r);else if(_e.test(r)){for(s=s||f.appendChild(t.createElement("div")),l=(Pe.exec(r)||["",""])[1].toLowerCase(),u=Xe[l]||Xe._default,s.innerHTML=u[1]+r.replace(Fe,"<$1></$2>")+u[2],o=u[0];o--;)s=s.lastChild;if(!ne.leadingWhitespace&&Me.test(r)&&h.push(t.createTextNode(Me.exec(r)[0])),!ne.tbody)for(r="table"!==l||ze.test(r)?"<table>"!==u[1]||ze.test(r)?0:s:s.firstChild,o=r&&r.childNodes.length;o--;)oe.nodeName(c=r.childNodes[o],"tbody")&&!c.childNodes.length&&r.removeChild(c);for(oe.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=f.lastChild}else h.push(t.createTextNode(r));for(s&&f.removeChild(s),ne.appendChecked||oe.grep(m(h,"input"),v),
+p=0;r=h[p++];)if((!i||-1===oe.inArray(r,i))&&(a=oe.contains(r.ownerDocument,r),s=m(f.appendChild(r),"script"),a&&x(s),n))for(o=0;r=s[o++];)Ue.test(r.type||"")&&n.push(r);return s=null,f},cleanData:function(e,t){for(var n,i,o,r,a=0,s=oe.expando,l=oe.cache,c=ne.deleteExpando,u=oe.event.special;null!=(n=e[a]);a++)if((t||oe.acceptData(n))&&(o=n[s],r=o&&l[o])){if(r.events)for(i in r.events)u[i]?oe.event.remove(n,i):oe.removeEvent(n,i,r.handle);l[o]&&(delete l[o],c?delete n[s]:typeof n.removeAttribute!==we?n.removeAttribute(s):n[s]=null,X.push(o))}}}),oe.fn.extend({text:function(e){return Ne(this,function(e){return void 0===e?oe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||pe).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){y(this,e).appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?oe.filter(e,this):this,o=0;null!=(n=i[o]);o++)t||1!==n.nodeType||oe.cleanData(m(n)),n.parentNode&&(t&&oe.contains(n.ownerDocument,n)&&x(m(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&oe.cleanData(m(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&oe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return oe.clone(this,e,t)})},html:function(e){return Ne(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Re,""):void 0;if(!("string"!=typeof e||qe.test(e)||!ne.htmlSerialize&&He.test(e)||!ne.leadingWhitespace&&Me.test(e)||Xe[(Pe.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Fe,"<$1></$2>");try{for(;i>n;n++)t=this[n]||{},1===t.nodeType&&(oe.cleanData(m(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,function(t){e=this.parentNode,oe.cleanData(m(this)),e&&e.replaceChild(t,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=Y.apply([],e);var n,i,o,r,a,s,l=0,c=this.length,u=this,d=c-1,f=e[0],h=oe.isFunction(f);if(h||c>1&&"string"==typeof f&&!ne.checkClone&&We.test(f))return this.each(function(n){var i=u.eq(n);h&&(e[0]=f.call(this,n,i.html())),i.domManip(e,t)});if(c&&(s=oe.buildFragment(e,this[0].ownerDocument,!1,this),n=s.firstChild,1===s.childNodes.length&&(s=n),n)){for(r=oe.map(m(s,"script"),b),o=r.length;c>l;l++)i=s,l!==d&&(i=oe.clone(i,!0,!0),o&&oe.merge(r,m(i,"script"))),t.call(this[l],i,l);if(o)for(a=r[r.length-1].ownerDocument,oe.map(r,A),l=0;o>l;l++)i=r[l],Ue.test(i.type||"")&&!oe._data(i,"globalEval")&&oe.contains(a,i)&&(i.src?oe._evalUrl&&oe._evalUrl(i.src):oe.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Ge,"")));s=n=null}return this}}),oe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){oe.fn[e]=function(e){for(var n,i=0,o=[],r=oe(e),a=r.length-1;a>=i;i++)n=i===a?this:this.clone(!0),oe(r[i])[t](n),Z.apply(o,n.get());return this.pushStack(o)}});var Ze,Je={};!function(){var e;ne.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,i;return n=pe.getElementsByTagName("body")[0],n&&n.style?(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==we&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",t.appendChild(pe.createElement("div")).style.width="5px",e=3!==t.offsetWidth),n.removeChild(i),e):void 0}}();var Ke,et,tt=/^margin/,nt=new RegExp("^("+Ee+")(?!px)[a-z%]+$","i"),it=/^(top|right|bottom|left)$/;e.getComputedStyle?(Ke=function(t){return t.ownerDocument.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):e.getComputedStyle(t,null)},et=function(e,t,n){var i,o,r,a,s=e.style;return n=n||Ke(e),a=n?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==a||oe.contains(e.ownerDocument,e)||(a=oe.style(e,t)),nt.test(a)&&tt.test(t)&&(i=s.width,o=s.minWidth,r=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=i,s.minWidth=o,s.maxWidth=r)),void 0===a?a:a+""}):pe.documentElement.currentStyle&&(Ke=function(e){return e.currentStyle},et=function(e,t,n){var i,o,r,a,s=e.style;return n=n||Ke(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),nt.test(a)&&!it.test(t)&&(i=s.left,o=e.runtimeStyle,r=o&&o.left,r&&(o.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=i,r&&(o.left=r)),void 0===a?a:a+""||"auto"}),!function(){function t(){var t,n,i,o;(n=pe.getElementsByTagName("body")[0])&&n.style&&(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),t.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=a=!1,l=!0,e.getComputedStyle&&(r="1%"!==(e.getComputedStyle(t,null)||{}).top,a="4px"===(e.getComputedStyle(t,null)||{width:"4px"}).width,o=t.appendChild(pe.createElement("div")),o.style.cssText=t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",o.style.marginRight=o.style.width="0",t.style.width="1px",l=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight),t.removeChild(o)),t.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=t.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",s=0===o[0].offsetHeight,s&&(o[0].style.display="",o[1].style.display="none",s=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,r,a,s,l;n=pe.createElement("div"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",o=n.getElementsByTagName("a")[0],(i=o&&o.style)&&(i.cssText="float:left;opacity:.5",ne.opacity="0.5"===i.opacity,ne.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",ne.clearCloneStyle="content-box"===n.style.backgroundClip,ne.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,oe.extend(ne,{reliableHiddenOffsets:function(){return null==s&&t(),s},boxSizingReliable:function(){return null==a&&t(),a},pixelPosition:function(){return null==r&&t(),r},reliableMarginRight:function(){return null==l&&t(),l}}))}(),oe.swap=function(e,t,n,i){var o,r,a={};for(r in t)a[r]=e.style[r],e.style[r]=t[r];o=n.apply(e,i||[]);for(r in t)e.style[r]=a[r];return o};var ot=/alpha\([^)]*\)/i,rt=/opacity\s*=\s*([^)]*)/,at=/^(none|table(?!-c[ea]).+)/,st=new RegExp("^("+Ee+")(.*)$","i"),lt=new RegExp("^([+-])=("+Ee+")","i"),ct={position:"absolute",visibility:"hidden",display:"block"},ut={letterSpacing:"0",fontWeight:"400"},dt=["Webkit","O","Moz","ms"];oe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=et(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:ne.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,r,a,s=oe.camelCase(t),l=e.style;if(t=oe.cssProps[s]||(oe.cssProps[s]=S(l,s)),a=oe.cssHooks[t]||oe.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(o=a.get(e,!1,i))?o:l[t];if(r=typeof n,"string"===r&&(o=lt.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(oe.css(e,t)),r="number"),null!=n&&n===n&&("number"!==r||oe.cssNumber[s]||(n+="px"),ne.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),!(a&&"set"in a&&void 0===(n=a.set(e,n,i)))))try{l[t]=n}catch(e){}}},css:function(e,t,n,i){var o,r,a,s=oe.camelCase(t);return t=oe.cssProps[s]||(oe.cssProps[s]=S(e.style,s)),a=oe.cssHooks[t]||oe.cssHooks[s],a&&"get"in a&&(r=a.get(e,!0,n)),void 0===r&&(r=et(e,t,i)),"normal"===r&&t in ut&&(r=ut[t]),""===n||n?(o=parseFloat(r),!0===n||oe.isNumeric(o)?o||0:r):r}}),oe.each(["height","width"],function(e,t){oe.cssHooks[t]={get:function(e,n,i){return n?at.test(oe.css(e,"display"))&&0===e.offsetWidth?oe.swap(e,ct,function(){return $(e,t,i)}):$(e,t,i):void 0},set:function(e,n,i){var o=i&&Ke(e);return D(e,n,i?j(e,t,i,ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,o),o):0)}}}),ne.opacity||(oe.cssHooks.opacity={get:function(e,t){return rt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,i=e.currentStyle,o=oe.isNumeric(t)?"alpha(opacity="+100*t+")":"",r=i&&i.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===oe.trim(r.replace(ot,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||i&&!i.filter)||(n.filter=ot.test(r)?r.replace(ot,o):r+" "+o)}}),oe.cssHooks.marginRight=k(ne.reliableMarginRight,function(e,t){return t?oe.swap(e,{display:"inline-block"},et,[e,"marginRight"]):void 0}),oe.each({margin:"",padding:"",border:"Width"},function(e,t){oe.cssHooks[e+t]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[e+ke[i]+t]=r[i]||r[i-2]||r[0];return o}},tt.test(e)||(oe.cssHooks[e+t].set=D)}),oe.fn.extend({css:function(e,t){return Ne(this,function(e,t,n){var i,o,r={},a=0;if(oe.isArray(t)){for(i=Ke(e),o=t.length;o>a;a++)r[t[a]]=oe.css(e,t[a],!1,i);return r}return void 0!==n?oe.style(e,t,n):oe.css(e,t)},e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Se(this)?oe(this).show():oe(this).hide()})}}),oe.Tween=L,L.prototype={constructor:L,init:function(e,t,n,i,o,r){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=r||(oe.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return e&&e.get?e.get(this):L.propHooks._default.get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=oe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=oe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){oe.fx.step[e.prop]?oe.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[oe.cssProps[e.prop]]||oe.cssHooks[e.prop])?oe.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},oe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},oe.fx=L.prototype.init,oe.fx.step={};var ft,ht,pt=/^(?:toggle|show|hide)$/,gt=new RegExp("^(?:([+-])=|)("+Ee+")([a-z%]*)$","i"),mt=/queueHooks$/,vt=[R],yt={"*":[function(e,t){var n=this.createTween(e,t),i=n.cur(),o=gt.exec(t),r=o&&o[3]||(oe.cssNumber[e]?"":"px"),a=(oe.cssNumber[e]||"px"!==r&&+i)&&gt.exec(oe.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==r){r=r||a[3],o=o||[],a=+i||1;do{s=s||".5",a/=s,oe.style(n.elem,e,a+r)}while(s!==(s=n.cur()/i)&&1!==s&&--l)}return o&&(a=n.start=+a||+i||0,n.unit=r,n.end=o[1]?a+(o[1]+1)*o[2]:+o[2]),n}]};oe.Animation=oe.extend(M,{tweener:function(e,t){oe.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,i=0,o=e.length;o>i;i++)n=e[i],yt[n]=yt[n]||[],yt[n].unshift(t)},prefilter:function(e,t){t?vt.unshift(e):vt.push(e)}}),oe.speed=function(e,t,n){var i=e&&"object"==typeof e?oe.extend({},e):{complete:n||!n&&t||oe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!oe.isFunction(t)&&t};return i.duration=oe.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in oe.fx.speeds?oe.fx.speeds[i.duration]:oe.fx.speeds._default,(null==i.queue||!0===i.queue)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){oe.isFunction(i.old)&&i.old.call(this),i.queue&&oe.dequeue(this,i.queue)},i},oe.fn.extend({fadeTo:function(e,t,n,i){return this.filter(Se).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var o=oe.isEmptyObject(e),r=oe.speed(t,n,i),a=function(){var t=M(this,oe.extend({},e),r);(o||oe._data(this,"finish"))&&t.stop(!0)};return a.finish=a,o||!1===r.queue?this.each(a):this.queue(r.queue,a)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",r=oe.timers,a=oe._data(this);if(o)a[o]&&a[o].stop&&i(a[o]);else for(o in a)a[o]&&a[o].stop&&mt.test(o)&&i(a[o]);for(o=r.length;o--;)r[o].elem!==this||null!=e&&r[o].queue!==e||(r[o].anim.stop(n),t=!1,r.splice(o,1));(t||!n)&&oe.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=oe._data(this),i=n[e+"queue"],o=n[e+"queueHooks"],r=oe.timers,a=i?i.length:0;for(n.finish=!0,oe.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=r.length;t--;)r[t].elem===this&&r[t].queue===e&&(r[t].anim.stop(!0),r.splice(t,1));for(t=0;a>t;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish})}}),oe.each(["toggle","show","hide"],function(e,t){var n=oe.fn[t];oe.fn[t]=function(e,i,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,i,o)}}),oe.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){oe.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}}),oe.timers=[],oe.fx.tick=function(){var e,t=oe.timers,n=0;for(ft=oe.now();n<t.length;n++)(e=t[n])()||t[n]!==e||t.splice(n--,1);t.length||oe.fx.stop(),ft=void 0},oe.fx.timer=function(e){oe.timers.push(e),e()?oe.fx.start():oe.timers.pop()},oe.fx.interval=13,oe.fx.start=function(){ht||(ht=setInterval(oe.fx.tick,oe.fx.interval))},oe.fx.stop=function(){clearInterval(ht),ht=null},oe.fx.speeds={slow:600,fast:200,_default:400},oe.fn.delay=function(e,t){return e=oe.fx?oe.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var i=setTimeout(t,e);n.stop=function(){clearTimeout(i)}})},function(){var e,t,n,i,o;t=pe.createElement("div"),t.setAttribute("className","t"),t.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=t.getElementsByTagName("a")[0],n=pe.createElement("select"),o=n.appendChild(pe.createElement("option")),e=t.getElementsByTagName("input")[0],i.style.cssText="top:1px",ne.getSetAttribute="t"!==t.className,ne.style=/top/.test(i.getAttribute("style")),ne.hrefNormalized="/a"===i.getAttribute("href"),ne.checkOn=!!e.value,ne.optSelected=o.selected,ne.enctype=!!pe.createElement("form").enctype,n.disabled=!0,ne.optDisabled=!o.disabled,e=pe.createElement("input"),e.setAttribute("value",""),ne.input=""===e.getAttribute("value"),e.value="t",e.setAttribute("type","radio"),ne.radioValue="t"===e.value}();var bt=/\r/g;oe.fn.extend({val:function(e){var t,n,i,o=this[0];return arguments.length?(i=oe.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,oe(this).val()):e,null==o?o="":"number"==typeof o?o+="":oe.isArray(o)&&(o=oe.map(o,function(e){return null==e?"":e+""})),(t=oe.valHooks[this.type]||oe.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))})):o?(t=oe.valHooks[o.type]||oe.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(bt,""):null==n?"":n)):void 0}}),oe.extend({valHooks:{option:{get:function(e){var t=oe.find.attr(e,"value");return null!=t?t:oe.trim(oe.text(e))}},select:{get:function(e){for(var t,n,i=e.options,o=e.selectedIndex,r="select-one"===e.type||0>o,a=r?null:[],s=r?o+1:i.length,l=0>o?s:r?o:0;s>l;l++)if(n=i[l],!(!n.selected&&l!==o||(ne.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&oe.nodeName(n.parentNode,"optgroup"))){if(t=oe(n).val(),r)return t;a.push(t)}return a},set:function(e,t){for(var n,i,o=e.options,r=oe.makeArray(t),a=o.length;a--;)if(i=o[a],oe.inArray(oe.valHooks.option.get(i),r)>=0)try{i.selected=n=!0}catch(e){i.scrollHeight}else i.selected=!1;return n||(e.selectedIndex=-1),o}}}}),oe.each(["radio","checkbox"],function(){oe.valHooks[this]={set:function(e,t){return oe.isArray(t)?e.checked=oe.inArray(oe(e).val(),t)>=0:void 0}},ne.checkOn||(oe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var At,xt,wt=oe.expr.attrHandle,Ct=/^(?:checked|selected)$/i,Tt=ne.getSetAttribute,Et=ne.input;oe.fn.extend({attr:function(e,t){return Ne(this,oe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){oe.removeAttr(this,e)})}}),oe.extend({attr:function(e,t,n){var i,o,r=e.nodeType;if(e&&3!==r&&8!==r&&2!==r)return typeof e.getAttribute===we?oe.prop(e,t,n):(1===r&&oe.isXMLDoc(e)||(t=t.toLowerCase(),i=oe.attrHooks[t]||(oe.expr.match.bool.test(t)?xt:At)),void 0===n?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=oe.find.attr(e,t),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void oe.removeAttr(e,t))},removeAttr:function(e,t){var n,i,o=0,r=t&&t.match(ye);if(r&&1===e.nodeType)for(;n=r[o++];)i=oe.propFix[n]||n,oe.expr.match.bool.test(n)?Et&&Tt||!Ct.test(n)?e[i]=!1:e[oe.camelCase("default-"+n)]=e[i]=!1:oe.attr(e,n,""),e.removeAttribute(Tt?n:i)},attrHooks:{type:{set:function(e,t){if(!ne.radioValue&&"radio"===t&&oe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),xt={set:function(e,t,n){return!1===t?oe.removeAttr(e,n):Et&&Tt||!Ct.test(n)?e.setAttribute(!Tt&&oe.propFix[n]||n,n):e[oe.camelCase("default-"+n)]=e[n]=!0,n}},oe.each(oe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=wt[t]||oe.find.attr;wt[t]=Et&&Tt||!Ct.test(t)?function(e,t,i){var o,r;return i||(r=wt[t],wt[t]=o,o=null!=n(e,t,i)?t.toLowerCase():null,wt[t]=r),o}:function(e,t,n){return n?void 0:e[oe.camelCase("default-"+t)]?t.toLowerCase():null}}),Et&&Tt||(oe.attrHooks.value={set:function(e,t,n){return oe.nodeName(e,"input")?void(e.defaultValue=t):At&&At.set(e,t,n)}}),Tt||(At={set:function(e,t,n){var i=e.getAttributeNode(n);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(n)),i.value=t+="","value"===n||t===e.getAttribute(n)?t:void 0}},wt.id=wt.name=wt.coords=function(e,t,n){var i;return n?void 0:(i=e.getAttributeNode(t))&&""!==i.value?i.value:null},oe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:void 0},set:At.set},oe.attrHooks.contenteditable={set:function(e,t,n){At.set(e,""!==t&&t,n)}},oe.each(["width","height"],function(e,t){oe.attrHooks[t]={set:function(e,n){return""===n?(e.setAttribute(t,"auto"),n):void 0}}})),ne.style||(oe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var kt=/^(?:input|select|textarea|button|object)$/i,St=/^(?:a|area)$/i;oe.fn.extend({prop:function(e,t){return Ne(this,oe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=oe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(e){}})}}),oe.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var i,o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return r=1!==a||!oe.isXMLDoc(e),r&&(t=oe.propFix[t]||t,o=oe.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=oe.find.attr(e,"tabindex");return t?parseInt(t,10):kt.test(e.nodeName)||St.test(e.nodeName)&&e.href?0:-1}}}}),ne.hrefNormalized||oe.each(["href","src"],function(e,t){oe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),ne.optSelected||(oe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),oe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){oe.propFix[this.toLowerCase()]=this}),ne.enctype||(oe.propFix.enctype="encoding");var Nt=/[\t\r\n\f]/g;oe.fn.extend({addClass:function(e){var t,n,i,o,r,a,s=0,l=this.length,c="string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).addClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(ye)||[];l>s;s++)if(n=this[s],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Nt," "):" ")){for(r=0;o=t[r++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");a=oe.trim(i),n.className!==a&&(n.className=a)}return this},removeClass:function(e){var t,n,i,o,r,a,s=0,l=this.length,c=0===arguments.length||"string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).removeClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(ye)||[];l>s;s++)if(n=this[s],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Nt," "):"")){for(r=0;o=t[r++];)for(;i.indexOf(" "+o+" ")>=0;)i=i.replace(" "+o+" "," ");a=e?oe.trim(i):"",n.className!==a&&(n.className=a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(oe.isFunction(e)?function(n){oe(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,i=0,o=oe(this),r=e.match(ye)||[];t=r[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===we||"boolean"===n)&&(this.className&&oe._data(this,"__className__",this.className),this.className=this.className||!1===e?"":oe._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,i=this.length;i>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Nt," ").indexOf(t)>=0)return!0;return!1}}),oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){oe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),oe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Dt=oe.now(),jt=/\?/,$t=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;oe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,i=null,o=oe.trim(t+"");return o&&!oe.trim(o.replace($t,function(e,t,o,r){return n&&t&&(i=0),0===i?e:(n=o||t,i+=!r-!o,"")}))?Function("return "+o)():oe.error("Invalid JSON: "+t)},oe.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(i=new DOMParser,n=i.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(e){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||oe.error("Invalid XML: "+t),n};var Lt,Ot,It=/#.*$/,Bt=/([?&])_=[^&]*/,Rt=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Ft=/^\/\//,Pt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,zt={},_t={},qt="*/".concat("*");try{Ot=location.href}catch(e){Ot=pe.createElement("a"),Ot.href="",Ot=Ot.href}Lt=Pt.exec(Ot.toLowerCase())||[],oe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ot,type:"GET",isLocal:Ht.test(Lt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":oe.parseJSON,"text xml":oe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?z(z(e,oe.ajaxSettings),t):z(oe.ajaxSettings,e)},ajaxPrefilter:F(zt),ajaxTransport:F(_t),ajax:function(e,t){function n(e,t,n,i){var o,u,v,y,A,w=t;2!==b&&(b=2,s&&clearTimeout(s),c=void 0,a=i||"",x.readyState=e>0?4:0,o=e>=200&&300>e||304===e,n&&(y=_(d,x,n)),y=q(d,y,x,o),o?(d.ifModified&&(A=x.getResponseHeader("Last-Modified"),A&&(oe.lastModified[r]=A),(A=x.getResponseHeader("etag"))&&(oe.etag[r]=A)),204===e||"HEAD"===d.type?w="nocontent":304===e?w="notmodified":(w=y.state,u=y.data,v=y.error,o=!v)):(v=w,(e||!w)&&(w="error",0>e&&(e=0))),x.status=e,x.statusText=(t||w)+"",o?p.resolveWith(f,[u,w,x]):p.rejectWith(f,[x,w,v]),x.statusCode(m),m=void 0,l&&h.trigger(o?"ajaxSuccess":"ajaxError",[x,d,o?u:v]),g.fireWith(f,[x,w]),l&&(h.trigger("ajaxComplete",[x,d]),--oe.active||oe.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,r,a,s,l,c,u,d=oe.ajaxSetup({},t),f=d.context||d,h=d.context&&(f.nodeType||f.jquery)?oe(f):oe.event,p=oe.Deferred(),g=oe.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,A="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!u)for(u={};t=Rt.exec(a);)u[t[1].toLowerCase()]=t[2];t=u[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||A;return c&&c.abort(t),n(0,t),this}};if(p.promise(x).complete=g.add,x.success=x.done,x.error=x.fail,d.url=((e||d.url||Ot)+"").replace(It,"").replace(Ft,Lt[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=oe.trim(d.dataType||"*").toLowerCase().match(ye)||[""],null==d.crossDomain&&(i=Pt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===Lt[1]&&i[2]===Lt[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(Lt[3]||("http:"===Lt[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=oe.param(d.data,d.traditional)),P(zt,d,t,x),2===b)return x;l=oe.event&&d.global,l&&0==oe.active++&&oe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Mt.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(jt.test(r)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=Bt.test(r)?r.replace(Bt,"$1_="+Dt++):r+(jt.test(r)?"&":"?")+"_="+Dt++)),d.ifModified&&(oe.lastModified[r]&&x.setRequestHeader("If-Modified-Since",oe.lastModified[r]),oe.etag[r]&&x.setRequestHeader("If-None-Match",oe.etag[r])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&x.setRequestHeader("Content-Type",d.contentType),x.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+qt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)x.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(!1===d.beforeSend.call(f,x,d)||2===b))return x.abort();A="abort";for(o in{success:1,error:1,complete:1})x[o](d[o]);if(c=P(_t,d,t,x)){x.readyState=1,l&&h.trigger("ajaxSend",[x,d]),d.async&&d.timeout>0&&(s=setTimeout(function(){x.abort("timeout")},d.timeout));try{b=1,c.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return x},getJSON:function(e,t,n){return oe.get(e,t,n,"json")},getScript:function(e,t){return oe.get(e,void 0,t,"script")}}),oe.each(["get","post"],function(e,t){oe[t]=function(e,n,i,o){return oe.isFunction(n)&&(o=o||i,i=n,n=void 0),oe.ajax({url:e,type:t,dataType:o,data:n,success:i})}}),oe._evalUrl=function(e){return oe.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},oe.fn.extend({wrapAll:function(e){if(oe.isFunction(e))return this.each(function(t){oe(this).wrapAll(e.call(this,t))});if(this[0]){var t=oe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return this.each(oe.isFunction(e)?function(t){oe(this).wrapInner(e.call(this,t))}:function(){var t=oe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=oe.isFunction(e);return this.each(function(n){oe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){oe.nodeName(this,"body")||oe(this).replaceWith(this.childNodes)}).end()}}),oe.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!ne.reliableHiddenOffsets()&&"none"===(e.style&&e.style.display||oe.css(e,"display"))},oe.expr.filters.visible=function(e){return!oe.expr.filters.hidden(e)};var Wt=/%20/g,Ut=/\[\]$/,Qt=/\r?\n/g,Gt=/^(?:submit|button|image|reset|file)$/i,Xt=/^(?:input|select|textarea|keygen)/i;oe.param=function(e,t){var n,i=[],o=function(e,t){t=oe.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=oe.ajaxSettings&&oe.ajaxSettings.traditional),oe.isArray(e)||e.jquery&&!oe.isPlainObject(e))oe.each(e,function(){o(this.name,this.value)});else for(n in e)W(n,e[n],t,o);return i.join("&").replace(Wt,"+")},oe.fn.extend({serialize:function(){return oe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=oe.prop(this,"elements");return e?oe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!oe(this).is(":disabled")&&Xt.test(this.nodeName)&&!Gt.test(e)&&(this.checked||!De.test(e))}).map(function(e,t){var n=oe(this).val();return null==n?null:oe.isArray(n)?oe.map(n,function(e){return{name:t.name,value:e.replace(Qt,"\r\n")}}):{name:t.name,value:n.replace(Qt,"\r\n")}}).get()}}),oe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||Q()}:U;var Vt=0,Yt={},Zt=oe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in Yt)Yt[e](void 0,!0)}),ne.cors=!!Zt&&"withCredentials"in Zt,(Zt=ne.ajax=!!Zt)&&oe.ajaxTransport(function(e){if(!e.crossDomain||ne.cors){var t;return{send:function(n,i){var o,r=e.xhr(),a=++Vt;if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)r[o]=e.xhrFields[o];e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&r.setRequestHeader(o,n[o]+"");r.send(e.hasContent&&e.data||null),t=function(n,o){var s,l,c;if(t&&(o||4===r.readyState))if(delete Yt[a],t=void 0,r.onreadystatechange=oe.noop,o)4!==r.readyState&&r.abort();else{c={},s=r.status,"string"==typeof r.responseText&&(c.text=r.responseText);try{l=r.statusText}catch(e){l=""}s||!e.isLocal||e.crossDomain?1223===s&&(s=204):s=c.text?200:404}c&&i(s,l,c,r.getAllResponseHeaders())},e.async?4===r.readyState?setTimeout(t):r.onreadystatechange=Yt[a]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),oe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){
+return oe.globalEval(e),e}}}),oe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),oe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=pe.head||oe("head")[0]||pe.documentElement;return{send:function(i,o){t=pe.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var Jt=[],Kt=/(=)\?(?=&|$)|\?\?/;oe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Jt.pop()||oe.expando+"_"+Dt++;return this[e]=!0,e}}),oe.ajaxPrefilter("json jsonp",function(t,n,i){var o,r,a,s=!1!==t.jsonp&&(Kt.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Kt.test(t.data)&&"data");return s||"jsonp"===t.dataTypes[0]?(o=t.jsonpCallback=oe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Kt,"$1"+o):!1!==t.jsonp&&(t.url+=(jt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return a||oe.error(o+" was not called"),a[0]},t.dataTypes[0]="json",r=e[o],e[o]=function(){a=arguments},i.always(function(){e[o]=r,t[o]&&(t.jsonpCallback=n.jsonpCallback,Jt.push(o)),a&&oe.isFunction(r)&&r(a[0]),a=r=void 0}),"script"):void 0}),oe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||pe;var i=de.exec(e),o=!n&&[];return i?[t.createElement(i[1])]:(i=oe.buildFragment([e],t,o),o&&o.length&&oe(o).remove(),oe.merge([],i.childNodes))};var en=oe.fn.load;oe.fn.load=function(e,t,n){if("string"!=typeof e&&en)return en.apply(this,arguments);var i,o,r,a=this,s=e.indexOf(" ");return s>=0&&(i=oe.trim(e.slice(s,e.length)),e=e.slice(0,s)),oe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),a.length>0&&oe.ajax({url:e,type:r,dataType:"html",data:t}).done(function(e){o=arguments,a.html(i?oe("<div>").append(oe.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){a.each(n,o||[e.responseText,t,e])}),this},oe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){oe.fn[t]=function(e){return this.on(t,e)}}),oe.expr.filters.animated=function(e){return oe.grep(oe.timers,function(t){return e===t.elem}).length};var tn=e.document.documentElement;oe.offset={setOffset:function(e,t,n){var i,o,r,a,s,l,c,u=oe.css(e,"position"),d=oe(e),f={};"static"===u&&(e.style.position="relative"),s=d.offset(),r=oe.css(e,"top"),l=oe.css(e,"left"),c=("absolute"===u||"fixed"===u)&&oe.inArray("auto",[r,l])>-1,c?(i=d.position(),a=i.top,o=i.left):(a=parseFloat(r)||0,o=parseFloat(l)||0),oe.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):d.css(f)}},oe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){oe.offset.setOffset(this,e,t)});var t,n,i={top:0,left:0},o=this[0],r=o&&o.ownerDocument;return r?(t=r.documentElement,oe.contains(t,o)?(typeof o.getBoundingClientRect!==we&&(i=o.getBoundingClientRect()),n=G(r),{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var e,t,n={top:0,left:0},i=this[0];return"fixed"===oe.css(i,"position")?t=i.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),oe.nodeName(e[0],"html")||(n=e.offset()),n.top+=oe.css(e[0],"borderTopWidth",!0),n.left+=oe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-oe.css(i,"marginTop",!0),left:t.left-n.left-oe.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||tn;e&&!oe.nodeName(e,"html")&&"static"===oe.css(e,"position");)e=e.offsetParent;return e||tn})}}),oe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);oe.fn[e]=function(i){return Ne(this,function(e,i,o){var r=G(e);return void 0===o?r?t in r?r[t]:r.document.documentElement[i]:e[i]:void(r?r.scrollTo(n?oe(r).scrollLeft():o,n?o:oe(r).scrollTop()):e[i]=o)},e,i,arguments.length,null)}}),oe.each(["top","left"],function(e,t){oe.cssHooks[t]=k(ne.pixelPosition,function(e,n){return n?(n=et(e,t),nt.test(n)?oe(e).position()[t]+"px":n):void 0})}),oe.each({Height:"height",Width:"width"},function(e,t){oe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){oe.fn[i]=function(i,o){var r=arguments.length&&(n||"boolean"!=typeof i),a=n||(!0===i||!0===o?"margin":"border");return Ne(this,function(t,n,i){var o;return oe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?oe.css(t,n,a):oe.style(t,n,i,a)},t,r?i:void 0,r,null)}})}),oe.fn.size=function(){return this.length},oe.fn.andSelf=oe.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return oe});var nn=e.jQuery,on=e.$;return oe.noConflict=function(t){return e.$===oe&&(e.$=on),t&&e.jQuery===oe&&(e.jQuery=nn),oe},typeof t===we&&(e.jQuery=e.$=oe),oe}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(e){"use strict";var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),function(e){"use strict";function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}e.fn.emulateTransitionEnd=function(t){var n=!1,i=this;e(this).one("bsTransitionEnd",function(){n=!0});var o=function(){n||e(i).trigger(e.support.transition.end)};return setTimeout(o,t),this},e(function(){e.support.transition=t(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){return e(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var n=e(this),o=n.data("bs.alert");o||n.data("bs.alert",o=new i(this)),"string"==typeof t&&o[t].call(n)})}var n='[data-dismiss="alert"]',i=function(t){e(t).on("click",n,this.close)};i.VERSION="3.3.5",i.TRANSITION_DURATION=150,i.prototype.close=function(t){function n(){a.detach().trigger("closed.bs.alert").remove()}var o=e(this),r=o.attr("data-target");r||(r=o.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var a=e(r);t&&t.preventDefault(),a.length||(a=o.closest(".alert")),a.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(a.removeClass("in"),e.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var o=e.fn.alert;e.fn.alert=t,e.fn.alert.Constructor=i,e.fn.alert.noConflict=function(){return e.fn.alert=o,this},e(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.button"),r="object"==typeof t&&t;o||i.data("bs.button",o=new n(this,r)),"toggle"==t?o.toggle():t&&o.setState(t)})}var n=function(t,i){this.$element=e(t),this.options=e.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.5",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();t+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(e.proxy(function(){i[o](null==r[t]?this.options[t]:r[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=e.fn.button;e.fn.button=t,e.fn.button.Constructor=n,e.fn.button.noConflict=function(){return e.fn.button=i,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=e(n.target);i.hasClass("btn")||(i=i.closest(".btn")),t.call(i,"toggle"),e(n.target).is('input[type="radio"]')||e(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.carousel"),r=e.extend({},n.DEFAULTS,i.data(),"object"==typeof t&&t),a="string"==typeof t?t:r.slide;o||i.data("bs.carousel",o=new n(this,r)),"number"==typeof t?o.to(t):a?o[a]():r.interval&&o.pause().cycle()})}var n=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},n.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},n.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t);if(("prev"==e&&0===n||"next"==e&&n==this.$items.length-1)&&!this.options.wrap)return t;var i="prev"==e?-1:1,o=(n+i)%this.$items.length;return this.$items.eq(o)},n.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){t.to(e)}):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},n.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){return this.sliding?void 0:this.slide("next")},n.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},n.prototype.slide=function(t,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(t,o),a=this.interval,s="next"==t?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=e.Event("slide.bs.carousel",{relatedTarget:c,direction:s});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=e(this.$indicators.children()[this.getItemIndex(r)]);d&&d.addClass("active")}var f=e.Event("slid.bs.carousel",{relatedTarget:c,direction:s});return e.support.transition&&this.$element.hasClass("slide")?(r.addClass(t),r[0].offsetWidth,o.addClass(s),r.addClass(s),o.one("bsTransitionEnd",function(){r.removeClass([t,s].join(" ")).addClass("active"),o.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(f)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(f)),a&&this.cycle(),this}};var i=e.fn.carousel;e.fn.carousel=t,e.fn.carousel.Constructor=n,e.fn.carousel.noConflict=function(){return e.fn.carousel=i,this};var o=function(n){var i,o=e(this),r=e(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var a=e.extend({},r.data(),o.data()),s=o.attr("data-slide-to");s&&(a.interval=!1),t.call(r,a),s&&r.data("bs.carousel").to(s),n.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var n=e(this);t.call(n,n.data())})})}(jQuery),function(e){"use strict";function t(t){var n,i=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(i)}function n(t){return this.each(function(){var n=e(this),o=n.data("bs.collapse"),r=e.extend({},i.DEFAULTS,n.data(),"object"==typeof t&&t);!o&&r.toggle&&/show|hide/.test(t)&&(r.toggle=!1),o||n.data("bs.collapse",o=new i(this,r)),"string"==typeof t&&o[t]()})}var i=function(t,n){this.$element=e(t),this.options=e.extend({},i.DEFAULTS,n),this.$trigger=e('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.5",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(t=o.data("bs.collapse"))&&t.transitioning)){var r=e.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(n.call(o,"hide"),t||o.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return s.call(this);var l=e.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",e.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[a](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=e.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return e.support.transition?void this.$element[n](0).one("bsTransitionEnd",e.proxy(o,this)).emulateTransitionEnd(i.TRANSITION_DURATION):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return e(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy(function(n,i){var o=e(i);this.addAriaAndCollapsedClass(t(o),o)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=e.fn.collapse;e.fn.collapse=n,e.fn.collapse.Constructor=i,e.fn.collapse.noConflict=function(){return e.fn.collapse=o,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var o=e(this);o.attr("data-target")||i.preventDefault();var r=t(o),a=r.data("bs.collapse"),s=a?"toggle":o.data();n.call(r,s)})}(jQuery),function(e){"use strict";function t(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&e(n);return i&&i.length?i:t.parent()}function n(n){n&&3===n.which||(e(o).remove(),e(r).each(function(){var i=e(this),o=t(i),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(o[0],n.target)||(o.trigger(n=e.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),o.removeClass("open").trigger("hidden.bs.dropdown",r))))}))}function i(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new a(this)),"string"==typeof t&&i[t].call(n)})}var o=".dropdown-backdrop",r='[data-toggle="dropdown"]',a=function(t){e(t).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.5",a.prototype.toggle=function(i){var o=e(this);if(!o.is(".disabled, :disabled")){var r=t(o),a=r.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",n);var s={relatedTarget:this};if(r.trigger(i=e.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;o.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",s)}return!1}},a.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=e(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var o=t(i),a=o.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&o.find(r).trigger("focus"),i.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l<s.length-1&&l++,~l||(l=0),s.eq(l).trigger("focus")}}}};var s=e.fn.dropdown;e.fn.dropdown=i,e.fn.dropdown.Constructor=a,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",r,a.prototype.toggle).on("keydown.bs.dropdown.data-api",r,a.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",a.prototype.keydown)}(jQuery),function(e){"use strict";function t(t,i){return this.each(function(){var o=e(this),r=o.data("bs.modal"),a=e.extend({},n.DEFAULTS,o.data(),"object"==typeof t&&t);r||o.data("bs.modal",r=new n(this,a)),"string"==typeof t?r[t](i):a.show&&r.show(i)})}var n=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},n.prototype.show=function(t){var i=this,o=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(t){e(t.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var o=e.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),o&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t});o?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},n.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",e.proxy(function(e){27==e.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(t){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=e.support.transition&&o;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+o).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy(function(e){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;r?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){i.removeBackdrop(),t&&t()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else t&&t()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",e+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var i=e.fn.modal;e.fn.modal=t,e.fn.modal.Constructor=n,e.fn.modal.noConflict=function(){return e.fn.modal=i,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=e(this),o=i.attr("href"),r=e(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),a=r.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(o)&&o},r.data(),i.data());i.is("a")&&n.preventDefault(),r.one("show.bs.modal",function(e){e.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),t.call(r,a,this)})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tooltip"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.tooltip",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(t,n,i){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var a=o[r];if("click"==a)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},n.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,i){n[e]!=i&&(t[e]=i)}),t},n.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},n.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),n.isInStateTrue()?void 0:(clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide())},n.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var i=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!i)return;var o=this,r=this.tip(),a=this.getUID(this.type);this.setContent(),r.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&r.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(s);c&&(s=s.replace(l,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=r[0].offsetWidth,f=r[0].offsetHeight;if(c){var h=s,p=this.getPosition(this.$viewport);s="bottom"==s&&u.bottom+f>p.bottom?"top":"top"==s&&u.top-f<p.top?"bottom":"right"==s&&u.right+d>p.width?"left":"left"==s&&u.left-d<p.left?"right":s,r.removeClass(h).addClass(s)}var g=this.getCalculatedOffset(s,u,d,f);this.applyPlacement(g,s);var m=function(){var e=o.hoverState;o.$element.trigger("shown.bs."+o.type),o.hoverState=null,"out"==e&&o.leave(o)};e.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(n.TRANSITION_DURATION):m()}},n.prototype.applyPlacement=function(t,n){var i=this.tip(),o=i[0].offsetWidth,r=i[0].offsetHeight,a=parseInt(i.css("margin-top"),10),s=parseInt(i.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),t.top+=a,t.left+=s,e.offset.setOffset(i[0],e.extend({using:function(e){i.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=r&&(t.top=t.top+r-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-o+l:2*u.top-r+c,h=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(f,i[0][h],d)},n.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},n.prototype.hide=function(t){function i(){"in"!=o.hoverState&&r.detach(),o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),t&&t()}var o=this,r=e(this.$tip),a=e.Event("hide.bs."+this.type);return this.$element.trigger(a),a.isDefaultPrevented()?void 0:(r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i(),this.hoverState=null,this)},n.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(t){t=t||this.$element;var n=t[0],i="BODY"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var r=i?{top:0,left:0}:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},s=i?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,a,s,r)},n.prototype.getCalculatedOffset=function(e,t,n,i){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-i,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-i/2,left:t.left-n}:{top:t.top+t.height/2-i/2,left:t.left+t.width}},n.prototype.getViewportAdjustedDelta=function(e,t,n,i){var o={top:0,left:0};if(!this.$viewport)return o
+;var r=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-r-a.scroll,l=t.top+r-a.scroll+i;s<a.top?o.top=a.top-s:l>a.top+a.height&&(o.top=a.top+a.height-l)}else{var c=t.left-r,u=t.left+r+n;c<a.left?o.left=a.left-c:u>a.right&&(o.left=a.left+a.width-u)}return o},n.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},n.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null})};var i=e.fn.tooltip;e.fn.tooltip=t,e.fn.tooltip.Constructor=n,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=i,this}}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.popover"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.popover",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.5",n.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),n.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=e.fn.popover;e.fn.popover=t,e.fn.popover.Constructor=n,e.fn.popover.noConflict=function(){return e.fn.popover=i,this}}(jQuery),function(e){"use strict";function t(n,i){this.$body=e(document.body),this.$scrollElement=e(e(n).is(document.body)?window:n),this.options=e.extend({},t.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=e(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new t(this,r)),"string"==typeof n&&o[n]()})}t.VERSION="3.3.5",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=e(this),o=t.data("target")||t.attr("href"),r=/^#./.test(o)&&e(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=i)return a!=(e=r[r.length-1])&&this.activate(e);if(a&&t<o[0])return this.activeTarget=null,this.clear();for(e=o.length;e--;)a!=r[e]&&t>=o[e]&&(void 0===o[e+1]||t<o[e+1])&&this.activate(r[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=e(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=i,this},e(window).on("load.bs.scrollspy.data-api",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tab");o||i.data("bs.tab",o=new n(this)),"string"==typeof t&&o[t]()})}var n=function(t){this.element=e(t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=t.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=n.find(".active:last a"),r=e.Event("hide.bs.tab",{relatedTarget:t[0]}),a=e.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(r),t.trigger(a),!a.isDefaultPrevented()&&!r.isDefaultPrevented()){var s=e(i);this.activate(t.closest("li"),n),this.activate(s,s.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},n.prototype.activate=function(t,i,o){function r(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}var a=i.find("> .active"),s=o&&e.support.transition&&(a.length&&a.hasClass("fade")||!!i.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),a.removeClass("in")};var i=e.fn.tab;e.fn.tab=t,e.fn.tab.Constructor=n,e.fn.tab.noConflict=function(){return e.fn.tab=i,this};var o=function(n){n.preventDefault(),t.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.affix"),r="object"==typeof t&&t;o||i.data("bs.affix",o=new n(this,r)),"string"==typeof t&&o[t]()})}var n=function(t,i){this.options=e.extend({},n.DEFAULTS,i),this.$target=e(this.options.target).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.5",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(e,t,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return n>o&&"top";if("bottom"==this.affixed)return null!=n?!(o+this.unpin<=r.top)&&"bottom":!(e-i>=o+a)&&"bottom";var s=null==this.affixed,l=s?o:r.top,c=s?a:t;return null!=n&&n>=o?"top":null!=i&&l+c>=e-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var e=this.$target.scrollTop(),t=this.$element.offset();return this.pinnedOffset=t.top-e},n.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,a=Math.max(e(document).height(),e(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var s=this.getState(a,t,o,r);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-t-r})}};var i=e.fn.affix;e.fn.affix=t,e.fn.affix.Constructor=n,e.fn.affix.noConflict=function(){return e.fn.affix=i,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var n=e(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),t.call(n,i)})})}(jQuery),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){(function(t){function i(e,t,n,i){var a=o(n.substr(n.lastIndexOf(e.domain)),e);a&&r({mode:null,el:i,flags:a,engineSettings:t})}function o(e,t){for(var n={theme:C(I.settings.themes.gray,null),stylesheets:t.stylesheets,holderURL:[]},i=!1,o=String.fromCharCode(11),r=e.replace(/([^\\])\//g,"$1"+o).split(o),a=/%[0-9a-f]{2}/gi,s=r.length,l=0;s>l;l++){var c=r[l];if(c.match(a))try{c=decodeURIComponent(c)}catch(e){c=r[l]}var u=!1;if(I.flags.dimensions.match(c))i=!0,n.dimensions=I.flags.dimensions.output(c),u=!0;else if(I.flags.fluid.match(c))i=!0,n.dimensions=I.flags.fluid.output(c),n.fluid=!0,u=!0;else if(I.flags.textmode.match(c))n.textmode=I.flags.textmode.output(c),u=!0;else if(I.flags.colors.match(c)){var d=I.flags.colors.output(c);n.theme=C(n.theme,d),u=!0}else if(t.themes[c])t.themes.hasOwnProperty(c)&&(n.theme=C(t.themes[c],null)),u=!0;else if(I.flags.font.match(c))n.font=I.flags.font.output(c),u=!0;else if(I.flags.auto.match(c))n.auto=!0,u=!0;else if(I.flags.text.match(c))n.text=I.flags.text.output(c),u=!0;else if(I.flags.size.match(c))n.size=I.flags.size.output(c),u=!0;else if(I.flags.random.match(c)){null==I.vars.cache.themeKeys&&(I.vars.cache.themeKeys=Object.keys(t.themes));var f=I.vars.cache.themeKeys[0|Math.random()*I.vars.cache.themeKeys.length];n.theme=C(t.themes[f],null),u=!0}u&&n.holderURL.push(c)}return n.holderURL.unshift(t.domain),n.holderURL=n.holderURL.join("/"),!!i&&n}function r(e){var t=e.mode,n=e.el,i=e.flags,o=e.engineSettings,r=i.dimensions,s=i.theme,l=r.width+"x"+r.height;if(t=null==t?i.fluid?"fluid":"image":t,null!=i.text&&(s.text=i.text,"object"===n.nodeName.toLowerCase())){for(var d=s.text.split("\\n"),f=0;f<d.length;f++)d[f]=E(d[f]);s.text=d.join("\\n")}var h=i.holderURL,g=C(o,null);if(i.font&&(s.font=i.font,!g.noFontFallback&&"img"===n.nodeName.toLowerCase()&&I.setup.supportsCanvas&&"svg"===g.renderer&&(g=C(g,{renderer:"canvas"}))),i.font&&"canvas"==g.renderer&&(g.reRender=!0),"background"==t)null==n.getAttribute("data-background-src")&&p(n,{"data-background-src":h});else{var m={};m[I.vars.dataAttr]=h,p(n,m)}i.theme=s,n.holderData={flags:i,engineSettings:g},("image"==t||"fluid"==t)&&p(n,{alt:s.text?s.text+" ["+l+"]":l});var v={mode:t,el:n,holderSettings:{dimensions:r,theme:s,flags:i},engineSettings:g};"image"==t?("html"!=g.renderer&&i.auto||(n.style.width=r.width+"px",n.style.height=r.height+"px"),"html"==g.renderer?n.style.backgroundColor=s.background:(a(v),"exact"==i.textmode&&(n.holderData.resizeUpdate=!0,I.vars.resizableImages.push(n),c(n)))):"background"==t&&"html"!=g.renderer?a(v):"fluid"==t&&(n.holderData.resizeUpdate=!0,"%"==r.height.slice(-1)?n.style.height=r.height:null!=i.auto&&i.auto||(n.style.height=r.height+"px"),"%"==r.width.slice(-1)?n.style.width=r.width:null!=i.auto&&i.auto||(n.style.width=r.width+"px"),("inline"==n.style.display||""===n.style.display||"none"==n.style.display)&&(n.style.display="block"),u(n),"html"==g.renderer?n.style.backgroundColor=s.background:(I.vars.resizableImages.push(n),c(n)))}function a(e){function n(){var t=null;switch(l.renderer){case"canvas":t=R(u,e);break;case"svg":t=H(u,e);break;default:throw"Holder: invalid renderer: "+l.renderer}return t}var i=null,o=e.mode,r=e.holderSettings,a=e.el,l=e.engineSettings;switch(l.renderer){case"svg":if(!I.setup.supportsSVG)return;break;case"canvas":if(!I.setup.supportsCanvas)return;break;default:return}var c={width:r.dimensions.width,height:r.dimensions.height,theme:r.theme,flags:r.flags},u=s(c);if(null==(i=n()))throw"Holder: couldn't render placeholder";"background"==o?(a.style.backgroundImage="url("+i+")",a.style.backgroundSize=c.width+"px "+c.height+"px"):("img"===a.nodeName.toLowerCase()?p(a,{src:i}):"object"===a.nodeName.toLowerCase()&&(p(a,{data:i}),p(a,{type:"image/svg+xml"})),l.reRender&&t.setTimeout(function(){var e=n();if(null==e)throw"Holder: couldn't render placeholder";"img"===a.nodeName.toLowerCase()?p(a,{src:e}):"object"===a.nodeName.toLowerCase()&&(p(a,{data:e}),p(a,{type:"image/svg+xml"}))},100)),p(a,{"data-holder-rendered":!0})}function s(e){function t(e,t,n,i){t.width=n,t.height=i,e.width=Math.max(e.width,t.width),e.height+=t.height,e.add(t)}var n=I.defaults.size;switch(parseFloat(e.theme.size)?n=e.theme.size:parseFloat(e.flags.size)&&(n=e.flags.size),e.font={family:e.theme.font?e.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:l(e.width,e.height,n),units:e.theme.units?e.theme.units:I.defaults.units,weight:e.theme.fontweight?e.theme.fontweight:"bold"},e.text=e.theme.text?e.theme.text:Math.floor(e.width)+"x"+Math.floor(e.height),e.flags.textmode){case"literal":e.text=e.flags.dimensions.width+"x"+e.flags.dimensions.height;break;case"exact":if(!e.flags.exactDimensions)break;e.text=Math.floor(e.flags.exactDimensions.width)+"x"+Math.floor(e.flags.exactDimensions.height)}var i=new x({width:e.width,height:e.height}),o=i.Shape,r=new o.Rect("holderBg",{fill:e.theme.background});r.resize(e.width,e.height),i.root.add(r);var a=new o.Group("holderTextGroup",{text:e.text,align:"center",font:e.font,fill:e.theme.foreground});a.moveTo(null,null,1),i.root.add(a);var s=a.textPositionData=B(i);if(!s)throw"Holder: staging fallback not supported yet.";a.properties.leading=s.boundingBox.height;var c=null,u=null;if(s.lineCount>1){var d=0,f=0,h=e.width*I.setup.lineWrapRatio,p=0;u=new o.Group("line"+p);for(var g=0;g<s.words.length;g++){var m=s.words[g];c=new o.Text(m.text);var v="\\n"==m.text;(d+m.width>=h||!0===v)&&(t(a,u,d,a.properties.leading),d=0,f+=a.properties.leading,p+=1,u=new o.Group("line"+p),u.y=f),!0!==v&&(c.moveTo(d,0),d+=s.spaceWidth+m.width,u.add(c))}t(a,u,d,a.properties.leading);for(var y in a.children)u=a.children[y],u.moveTo((a.width-u.width)/2,null,null);a.moveTo((e.width-a.width)/2,(e.height-a.height)/2,null),(e.height-a.height)/2<0&&a.moveTo(null,0,null)}else c=new o.Text(e.text),u=new o.Group("line0"),u.add(c),a.add(u),a.moveTo((e.width-s.boundingBox.width)/2,(e.height-s.boundingBox.height)/2,null);return i}function l(e,t,n){var i=parseInt(e,10),o=parseInt(t,10),r=Math.max(i,o),a=Math.min(i,o),s=.8*Math.min(a,r*I.defaults.scale);return Math.round(Math.max(n,s))}function c(e){var t;t=null==e||null==e.nodeType?I.vars.resizableImages:[e];for(var n=0,i=t.length;i>n;n++){var o=t[n];if(o.holderData){var r=o.holderData.flags,s=D(o);if(s){if(!o.holderData.resizeUpdate)continue;if(r.fluid&&r.auto){var l=o.holderData.fluidConfig;switch(l.mode){case"width":s.height=s.width/l.ratio;break;case"height":s.width=s.height*l.ratio}}var c={mode:"image",holderSettings:{dimensions:s,theme:r.theme,flags:r},el:o,engineSettings:o.holderData.engineSettings};"exact"==r.textmode&&(r.exactDimensions=s,c.holderSettings.dimensions=r.dimensions),a(c)}else f(o)}}}function u(e){if(e.holderData){var t=D(e);if(t){var n=e.holderData.flags,i={fluidHeight:"%"==n.dimensions.height.slice(-1),fluidWidth:"%"==n.dimensions.width.slice(-1),mode:null,initialDimensions:t};i.fluidWidth&&!i.fluidHeight?(i.mode="width",i.ratio=i.initialDimensions.width/parseFloat(n.dimensions.height)):!i.fluidWidth&&i.fluidHeight&&(i.mode="height",i.ratio=parseFloat(n.dimensions.width)/i.initialDimensions.height),e.holderData.fluidConfig=i}else f(e)}}function d(){for(var e,n=[],i=Object.keys(I.vars.invisibleImages),o=0,r=i.length;r>o;o++)e=I.vars.invisibleImages[i[o]],D(e)&&"img"==e.nodeName.toLowerCase()&&(n.push(e),delete I.vars.invisibleImages[i[o]]);n.length&&O.run({images:n}),t.requestAnimationFrame(d)}function f(e){e.holderData.invisibleId||(I.vars.invisibleId+=1,I.vars.invisibleImages["i"+I.vars.invisibleId]=e,e.holderData.invisibleId=I.vars.invisibleId)}function h(e,t){return null==t?document.createElement(e):document.createElementNS(t,e)}function p(e,t){for(var n in t)e.setAttribute(n,t[n])}function g(e,t,n){var i,o;null==e?(e=h("svg",j),i=h("defs",j),o=h("style",j),p(o,{type:"text/css"}),i.appendChild(o),e.appendChild(i)):o=e.querySelector("style"),e.webkitMatchesSelector&&e.setAttribute("xmlns",j);for(var r=0;r<e.childNodes.length;r++)e.childNodes[r].nodeType===$&&e.removeChild(e.childNodes[r]);for(;o.childNodes.length;)o.removeChild(o.childNodes[0]);return p(e,{width:t,height:n,viewBox:"0 0 "+t+" "+n,preserveAspectRatio:"none"}),e}function m(e,n){if(t.XMLSerializer){var i=new XMLSerializer,o="",r=n.stylesheets;if(n.svgXMLStylesheet){for(var a=v(),s=r.length-1;s>=0;s--){var l=a.createProcessingInstruction("xml-stylesheet",'href="'+r[s]+'" rel="stylesheet"');a.insertBefore(l,a.firstChild)}var c=a.createProcessingInstruction("xml",'version="1.0" encoding="UTF-8" standalone="yes"');a.insertBefore(c,a.firstChild),a.removeChild(a.documentElement),o=i.serializeToString(a)}var u=i.serializeToString(e);return u=u.replace(/\&amp;(\#[0-9]{2,}\;)/g,"&$1"),o+u}}function v(){return t.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function y(e){I.vars.debounceTimer||e.call(this),I.vars.debounceTimer&&t.clearTimeout(I.vars.debounceTimer),I.vars.debounceTimer=t.setTimeout(function(){I.vars.debounceTimer=null,e.call(this)},I.setup.debounce)}function b(){y(function(){c(null)})}var A=n(1),x=n(2),w=n(3),C=w.extend,T=w.cssProps,E=w.encodeHtmlEntity,k=w.decodeHtmlEntity,S=w.imageExists,N=w.getNodeArray,D=w.dimensionCheck,j="http://www.w3.org/2000/svg",$=8,L="2.6.0",O={version:L,addTheme:function(e,t){return null!=e&&null!=t&&(I.settings.themes[e]=t),delete I.vars.cache.themeKeys,this},addImage:function(e,t){var n=document.querySelectorAll(t);if(n.length)for(var i=0,o=n.length;o>i;i++){var r=h("img"),a={};a[I.vars.dataAttr]=e,p(r,a),n[i].appendChild(r)}return this},setResizeUpdate:function(e,t){e.holderData&&(e.holderData.resizeUpdate=!!t,e.holderData.resizeUpdate&&c(e))},run:function(e){e=e||{};var n={},a=C(I.settings,e);I.vars.preempted=!0,I.vars.dataAttr=a.dataAttr||I.vars.dataAttr,n.renderer=a.renderer?a.renderer:I.setup.renderer,-1===I.setup.renderers.join(",").indexOf(n.renderer)&&(n.renderer=I.setup.supportsSVG?"svg":I.setup.supportsCanvas?"canvas":"html");var s=N(a.images),l=N(a.bgnodes),c=N(a.stylenodes),u=N(a.objects);n.stylesheets=[],n.svgXMLStylesheet=!0,n.noFontFallback=!!a.noFontFallback&&a.noFontFallback;for(var d=0;d<c.length;d++){var f=c[d];if(f.attributes.rel&&f.attributes.href&&"stylesheet"==f.attributes.rel.value){var p=f.attributes.href.value,g=h("a");g.href=p;var m=g.protocol+"//"+g.host+g.pathname+g.search;n.stylesheets.push(m)}}for(d=0;d<l.length;d++)if(t.getComputedStyle){var v=t.getComputedStyle(l[d],null).getPropertyValue("background-image"),y=l[d].getAttribute("data-background-src"),b=null;b=null==y?v:y;var A=null,x="?"+a.domain+"/";if(0===b.indexOf(x))A=b.slice(1);else if(-1!=b.indexOf(x)){var w=b.substr(b.indexOf(x)).slice(1),T=w.match(/([^\"]*)"?\)/);null!=T&&(A=T[1])}if(null!=A){var E=o(A,a);E&&r({mode:"background",el:l[d],flags:E,engineSettings:n})}}for(d=0;d<u.length;d++){var k=u[d],D={};try{D.data=k.getAttribute("data"),D.dataSrc=k.getAttribute(I.vars.dataAttr)}catch(e){}var j=null!=D.data&&0===D.data.indexOf(a.domain),$=null!=D.dataSrc&&0===D.dataSrc.indexOf(a.domain);j?i(a,n,D.data,k):$&&i(a,n,D.dataSrc,k)}for(d=0;d<s.length;d++){var L=s[d],O={};try{O.src=L.getAttribute("src"),O.dataSrc=L.getAttribute(I.vars.dataAttr),O.rendered=L.getAttribute("data-holder-rendered")}catch(e){}var B=null!=O.src,R=null!=O.dataSrc&&0===O.dataSrc.indexOf(a.domain),H=null!=O.rendered&&"true"==O.rendered;B?0===O.src.indexOf(a.domain)?i(a,n,O.src,L):R&&(H?i(a,n,O.dataSrc,L):function(e,t,n,o,r){S(e,function(e){e||i(t,n,o,r)})}(O.src,a,n,O.dataSrc,L)):R&&i(a,n,O.dataSrc,L)}return this}},I={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(e){var t=this.regex.exec(e);return{width:+t[1],height:+t[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(e){var t=this.regex.exec(e);return{width:t[1],height:t[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(e){var t=this.regex.exec(e);return{foreground:"#"+t[2],background:"#"+t[1]}}},text:{regex:/text\:(.*)/,output:function(e){return this.regex.exec(e)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(e){return this.regex.exec(e)[1]}}}},B=function(){var e=null,t=null,n=null;return function(i){var o=i.root;if(I.setup.supportsSVG){var r=!1;(null==e||e.parentNode!==document.body)&&(r=!0),e=g(e,o.properties.width,o.properties.height),e.style.display="block",r&&(t=h("text",j),n=function(e){return document.createTextNode(e)}(null),p(t,{x:0}),t.appendChild(n),e.appendChild(t),document.body.appendChild(e),e.style.visibility="hidden",e.style.position="absolute",e.style.top="-100%",e.style.left="-100%");var a=o.children.holderTextGroup,s=a.properties;p(t,{y:s.font.size,style:T({"font-weight":s.font.weight,"font-size":s.font.size+s.font.units,"font-family":s.font.family})}),n.nodeValue=s.text;var l=t.getBBox(),c=Math.ceil(l.width/(o.properties.width*I.setup.lineWrapRatio)),u=s.text.split(" "),d=s.text.match(/\\n/g);c+=null==d?0:d.length,n.nodeValue=s.text.replace(/[ ]+/g,"");var f=t.getComputedTextLength(),m=l.width-f,v=Math.round(m/Math.max(1,u.length-1)),y=[];if(c>1){n.nodeValue="";for(var b=0;b<u.length;b++)if(0!==u[b].length){n.nodeValue=k(u[b]);var A=t.getBBox();y.push({text:u[b],width:A.width})}}return e.style.display="none",{spaceWidth:v,lineCount:c,boundingBox:l,words:y}}return!1}}(),R=function(){var e=h("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var i=n.root;e.width=I.dpr(i.properties.width),e.height=I.dpr(i.properties.height),t.textBaseline="middle",t.fillStyle=i.children.holderBg.properties.fill,t.fillRect(0,0,I.dpr(i.children.holderBg.width),I.dpr(i.children.holderBg.height));var o=i.children.holderTextGroup;o.properties,t.font=o.properties.font.weight+" "+I.dpr(o.properties.font.size)+o.properties.font.units+" "+o.properties.font.family+", monospace",t.fillStyle=o.properties.fill;for(var r in o.children){var a=o.children[r];for(var s in a.children){var l=a.children[s],c=I.dpr(o.x+a.x+l.x),u=I.dpr(o.y+a.y+l.y+o.properties.leading/2);t.fillText(l.properties.text,c,u)}}return e.toDataURL("image/png")}}(),H=function(){if(t.XMLSerializer){var e=v(),n=g(null,0,0),i=h("rect",j);return n.appendChild(i),function(t,o){var r=t.root;g(n,r.properties.width,r.properties.height);for(var a=n.querySelectorAll("g"),s=0;s<a.length;s++)a[s].parentNode.removeChild(a[s]);var l=o.holderSettings.flags.holderURL,c="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),u=h("g",j),d=r.children.holderTextGroup,f=d.properties,v=h("g",j),y=d.textPositionData,b="#"+c+" text { "+T({fill:f.fill,"font-weight":f.font.weight,"font-family":f.font.family+", monospace","font-size":f.font.size+f.font.units})+" } ",A=e.createComment("\nSource URL: "+l+"\nCreated with Holder.js 2.6.0.\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n"),x=e.createCDATASection(b),w=n.querySelector("style");p(u,{id:c}),n.insertBefore(A,n.firstChild),w.appendChild(x),u.appendChild(i),u.appendChild(v),n.appendChild(u),p(i,{width:r.children.holderBg.width,height:r.children.holderBg.height,fill:r.children.holderBg.properties.fill}),d.y+=.8*y.boundingBox.height;for(var C in d.children){var E=d.children[C];for(var k in E.children){var S=E.children[k],N=d.x+E.x+S.x,D=d.y+E.y+S.y,$=h("text",j),L=document.createTextNode(null);p($,{x:N,y:D}),L.nodeValue=S.properties.text,$.appendChild(L),v.appendChild($)}}return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(m(n,o.engineSettings))))}}}();for(var M in I.flags)I.flags.hasOwnProperty(M)&&(I.flags[M].match=function(e){return e.match(this.regex)});I.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},I.dpr=function(e){return e*I.setup.ratio},I.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var e=1,n=1,i=h("canvas"),o=null;i.getContext&&-1!=i.toDataURL("image/png").indexOf("data:image/png")&&(I.setup.renderer="canvas",o=i.getContext("2d"),I.setup.supportsCanvas=!0),I.setup.supportsCanvas&&(e=t.devicePixelRatio||1,n=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),I.setup.ratio=e/n,document.createElementNS&&document.createElementNS(j,"svg").createSVGRect&&(I.setup.renderer="svg",I.setup.supportsSVG=!0)}(),function(){I.vars.visibilityCheckStarted||(t.requestAnimationFrame(d),I.vars.visibilityCheckStarted=!0)}(),A&&A(function(){I.vars.preempted||O.run(),t.addEventListener?(t.addEventListener("resize",b,!1),t.addEventListener("orientationchange",b,!1)):t.attachEvent("onresize",b),"object"==typeof t.Turbolinks&&t.document.addEventListener("page:change",function(){O.run()})}),e.exports=O}).call(t,function(){return this}())},function(e){e.exports="undefined"!=typeof window&&function(e){function t(e){if(!x){if(!a.body)return o(t);for(x=!0;e=w.shift();)o(e)}}function n(e){(b||e.type===l||a[f]===d)&&(i(),t())}function i(){b?(a[y](m,n,c),e[y](l,n,c)):(a[p](v,n),e[p](u,n))}function o(e,t){setTimeout(e,+t>=0?t:1)}function r(e){x?o(e):w.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e,!1),document.readyState="complete"},!1),document.readyState="loading");var a=e.document,s=a.documentElement,l="load",c=!1,u="on"+l,d="complete",f="readyState",h="attachEvent",p="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",b=g in a,A=c,x=c,w=[];if(a[f]===d)o(t);else if(b)a[g](m,n,c),e[g](l,n,c);else{a[h](v,n),e[h](u,n);try{A=null==e.frameElement&&s}catch(e){}A&&A.doScroll&&function e(){if(!x){try{A.doScroll("left")}catch(t){return o(e,50)}i(),t()}}()}return r.version="1.4.0",r.isReady=function(){return x},r}(window)},function(e,t,n){var i=n(4),o=function(e){function t(e,t){for(var n in t)e[n]=t[n];return e}var n=1,o=i.defclass({constructor:function(e){n++,this.parent=null,this.children={},this.id=n,this.name="n"+n,null!=e&&(this.name=e),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(e,t){null!=e&&(this.width=e),null!=t&&(this.height=t)},moveTo:function(e,t,n){this.x=null!=e?e:this.x,this.y=null!=t?t:this.y,this.z=null!=n?n:this.z},add:function(e){var t=e.name;if(null!=this.children[t])throw"SceneGraph: child with that name already exists: "+t;this.children[t]=e,e.parent=this}}),r=i(o,function(t){this.constructor=function(){t.constructor.call(this,"root"),this.properties=e}}),a=i(o,function(e){function n(n,i){if(e.constructor.call(this,n),this.properties={fill:"#000"},null!=i)t(this.properties,i);else if(null!=n&&"string"!=typeof n)throw"SceneGraph: invalid node name"}this.Group=i.extend(this,{constructor:n,type:"group"}),this.Rect=i.extend(this,{constructor:n,type:"rect"}),this.Text=i.extend(this,{constructor:function(e){n.call(this),this.properties.text=e},type:"text"})}),s=new r;return this.Shape=a,this.root=s,this};e.exports=o},function(e,t){(function(e){t.extend=function(e,t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);if(null!=t)for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);return n},t.cssProps=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+":"+e[n]);return t.join(";")},t.encodeHtmlEntity=function(e){for(var t=[],n=0,i=e.length-1;i>=0;i--)n=e.charCodeAt(i),t.unshift(n>128?["&#",n,";"].join(""):e[i]);return t.join("")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t}}).call(t,function(){return this}())},function(e){var t=function(){},n=Array.prototype.slice,i=function(e,i){var o=t.prototype="function"==typeof e?e.prototype:e,r=new t,a=i.apply(r,n.call(arguments,2).concat(o));if("object"==typeof a)for(var s in a)r[s]=a[s];if(!r.hasOwnProperty("constructor"))return r;var l=r.constructor;return l.prototype=r,l};i.defclass=function(e){var t=e.constructor;return t.prototype=e,t},i.extend=function(e,t){return i(e,function(e){return this.uber=e,t})},e.exports=i}])}),function(e){"use strict";function t(e){return e.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function n(e){return parseFloat(t(e))>=10}var i,o={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},r={},a=0,s={},l=0,c={},u=null,d=null,f=function(){var e,t,n,i,o="ZeroClipboard.swf"
+;if(document.currentScript&&(i=document.currentScript.src));else{var r=document.getElementsByTagName("script");if("readyState"in r[0])for(e=r.length;e--&&("interactive"!==r[e].readyState||!(i=r[e].src)););else if("loading"===document.readyState)i=r[r.length-1].src;else{for(e=r.length;e--;){if(!(n=r[e].src)){t=null;break}if(n=n.split("#")[0].split("?")[0],n=n.slice(0,n.lastIndexOf("/")+1),null==t)t=n;else if(t!==n){t=null;break}}null!==t&&(i=t)}}return i&&(i=i.split("#")[0].split("?")[0],o=i.slice(0,i.lastIndexOf("/")+1)+o),o}(),h=function(){var e=/\-([a-z])/g,t=function(e,t){return t.toUpperCase()};return function(n){return n.replace(e,t)}}(),p=function(t,n){var i,o;return e.getComputedStyle?i=e.getComputedStyle(t,null).getPropertyValue(n):(o=h(n),i=t.currentStyle?t.currentStyle[o]:t.style[o]),"cursor"!==n||i&&"auto"!==i||"a"!==t.tagName.toLowerCase()?i:"pointer"},g=function(t){t||(t=e.event);var n;this!==e?n=this:t.target?n=t.target:t.srcElement&&(n=t.srcElement),R.activate(n)},m=function(e,t,n){e&&1===e.nodeType&&(e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n))},v=function(e,t,n){e&&1===e.nodeType&&(e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent&&e.detachEvent("on"+t,n))},y=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)||e.classList.add(t),e;if(t&&"string"==typeof t){var n=(t||"").split(/\s+/);if(1===e.nodeType)if(e.className){for(var i=" "+e.className+" ",o=e.className,r=0,a=n.length;a>r;r++)i.indexOf(" "+n[r]+" ")<0&&(o+=" "+n[r]);e.className=o.replace(/^\s+|\s+$/g,"")}else e.className=t}return e},b=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)&&e.classList.remove(t),e;if(t&&"string"==typeof t||void 0===t){var n=(t||"").split(/\s+/);if(1===e.nodeType&&e.className)if(t){for(var i=(" "+e.className+" ").replace(/[\n\t]/g," "),o=0,r=n.length;r>o;o++)i=i.replace(" "+n[o]+" "," ");e.className=i.replace(/^\s+|\s+$/g,"")}else e.className=""}return e},A=function(){var e,t,n,i=1;return"function"==typeof document.body.getBoundingClientRect&&(e=document.body.getBoundingClientRect(),t=e.right-e.left,n=document.body.offsetWidth,i=Math.round(t/n*100)/100),i},x=function(t,n){var i={left:0,top:0,width:0,height:0,zIndex:S(n)-1};if(t.getBoundingClientRect){var o,r,a,s=t.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(o=e.pageXOffset,r=e.pageYOffset):(a=A(),o=Math.round(document.documentElement.scrollLeft/a),r=Math.round(document.documentElement.scrollTop/a));var l=document.documentElement.clientLeft||0,c=document.documentElement.clientTop||0;i.left=s.left+o-l,i.top=s.top+r-c,i.width="width"in s?s.width:s.right-s.left,i.height="height"in s?s.height:s.bottom-s.top}return i},w=function(e,t){return null==t||t&&!0===t.cacheBust&&!0===t.useNoCache?(-1===e.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},C=function(t){var n,i,o,r=[],a=[],s=[];if(t.trustedOrigins&&("string"==typeof t.trustedOrigins?a.push(t.trustedOrigins):"object"==typeof t.trustedOrigins&&"length"in t.trustedOrigins&&(a=a.concat(t.trustedOrigins))),t.trustedDomains&&("string"==typeof t.trustedDomains?a.push(t.trustedDomains):"object"==typeof t.trustedDomains&&"length"in t.trustedDomains&&(a=a.concat(t.trustedDomains))),a.length)for(n=0,i=a.length;i>n;n++)if(a.hasOwnProperty(n)&&a[n]&&"string"==typeof a[n]){if(!(o=j(a[n])))continue;if("*"===o){s=[o];break}s.push.apply(s,[o,"//"+o,e.location.protocol+"//"+o])}return s.length&&r.push("trustedOrigins="+encodeURIComponent(s.join(","))),"string"==typeof t.jsModuleId&&t.jsModuleId&&r.push("jsModuleId="+encodeURIComponent(t.jsModuleId)),r.join("&")},T=function(e,t,n){if("function"==typeof t.indexOf)return t.indexOf(e,n);var i,o=t.length;for(void 0===n?n=0:0>n&&(n=o+n),i=n;o>i;i++)if(t.hasOwnProperty(i)&&t[i]===e)return i;return-1},E=function(e){if("string"==typeof e)throw new TypeError("ZeroClipboard doesn't accept query strings.");return e.length?e:[e]},k=function(t,n,i,o){o?e.setTimeout(function(){t.apply(n,i)},0):t.apply(n,i)},S=function(e){var t,n;return e&&("number"==typeof e&&e>0?t=e:"string"==typeof e&&(n=parseInt(e,10))&&!isNaN(n)&&n>0&&(t=n)),t||("number"==typeof F.zIndex&&F.zIndex>0?t=F.zIndex:"string"==typeof F.zIndex&&(n=parseInt(F.zIndex,10))&&!isNaN(n)&&n>0&&(t=n)),t||0},N=function(e,t){if(e&&!1!==t&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var n="`"+e+"` is deprecated. See docs for more info:\n    https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(n):console.log(n)}},D=function(){var e,t,n,i,o,r=arguments[0]||{};for(e=1,t=arguments.length;t>e;e++)if(null!=(n=arguments[e]))for(i in n)if(n.hasOwnProperty(i)){if(r[i],o=n[i],r===o)continue;void 0!==o&&(r[i]=o)}return r},j=function(e){if(null==e||""===e)return null;if(""===(e=e.replace(/^\s+|\s+$/g,"")))return null;var t=e.indexOf("//");e=-1===t?e:e.slice(t+2);var n=e.indexOf("/");return e=-1===n?e:-1===t||0===n?null:e.slice(0,n),e&&".swf"===e.slice(-4).toLowerCase()?null:e||null},$=function(){var e=function(e,t){var n,i,o;if(null!=e&&"*"!==t[0]&&("string"==typeof e&&(e=[e]),"object"==typeof e&&"length"in e))for(n=0,i=e.length;i>n;n++)if(e.hasOwnProperty(n)&&(o=j(e[n]))){if("*"===o){t.length=0,t.push("*");break}-1===T(o,t)&&t.push(o)}},t={always:"always",samedomain:"sameDomain",never:"never"};return function(n,i){var o,r=i.allowScriptAccess;if("string"==typeof r&&(o=r.toLowerCase())&&/^always|samedomain|never$/.test(o))return t[o];var a=j(i.moviePath);null===a&&(a=n);var s=[];e(i.trustedOrigins,s),e(i.trustedDomains,s);var l=s.length;if(l>0){if(1===l&&"*"===s[0])return"always";if(-1!==T(n,s))return 1===l&&n===a?"sameDomain":"always"}return"never"}}(),L=function(e){if(null==e)return[];if(Object.keys)return Object.keys(e);var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},O=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&delete e[t];return e},I=function(){try{return document.activeElement}catch(e){}return null},B=function(){var e=!1;if("boolean"==typeof o.disabled)e=!1===o.disabled;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(e=!0)}catch(e){}!e&&navigator.mimeTypes["application/x-shockwave-flash"]&&(e=!0)}return e},R=function(e,t){return this instanceof R?(this.id=""+a++,s[this.id]={instance:this,elements:[],handlers:{}},e&&this.clip(e),void 0!==t&&(N("new ZeroClipboard(elements, options)",F.debug),R.config(t)),this.options=R.config(),"boolean"!=typeof o.disabled&&(o.disabled=!B()),void(!1===o.disabled&&!0!==o.outdated&&null===o.bridge&&(o.outdated=!1,o.ready=!1,P()))):new R(e,t)};R.prototype.setText=function(e){return e&&""!==e&&(r["text/plain"]=e,!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setText?o.bridge.setText(e):o.ready=!1),this},R.prototype.setSize=function(e,t){return!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e,t):o.ready=!1,this};var H=function(e){!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setHandCursor?o.bridge.setHandCursor(e):o.ready=!1};R.prototype.destroy=function(){this.unclip(),this.off(),delete s[this.id]};var M=function(){var e,t,n,i=[],o=L(s);for(e=0,t=o.length;t>e;e++)(n=s[o[e]].instance)&&n instanceof R&&i.push(n);return i};R.version="1.3.5";var F={swfPath:f,trustedDomains:e.location.host?[e.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};R.config=function(e){if("object"==typeof e&&null!==e&&D(F,e),"string"!=typeof e||!e){var t={};for(var n in F)F.hasOwnProperty(n)&&(t[n]="object"==typeof F[n]&&null!==F[n]?"length"in F[n]?F[n].slice(0):D({},F[n]):F[n]);return t}return F.hasOwnProperty(e)?F[e]:void 0},R.destroy=function(){R.deactivate();for(var e in s)if(s.hasOwnProperty(e)&&s[e]){var t=s[e].instance;t&&"function"==typeof t.destroy&&t.destroy()}var n=z(o.bridge);n&&n.parentNode&&(n.parentNode.removeChild(n),o.ready=null,o.bridge=null)},R.activate=function(e){i&&(b(i,F.hoverClass),b(i,F.activeClass)),i=e,y(e,F.hoverClass),_();var t=F.title||e.getAttribute("title");if(t){var n=z(o.bridge);n&&n.setAttribute("title",t)}var r=!0===F.forceHandCursor||"pointer"===p(e,"cursor");H(r)},R.deactivate=function(){var e=z(o.bridge);e&&(e.style.left="0px",e.style.top="-9999px",e.removeAttribute("title")),i&&(b(i,F.hoverClass),b(i,F.activeClass),i=null)};var P=function(){var t,n,i=document.getElementById("global-zeroclipboard-html-bridge");if(!i){var r=R.config();r.jsModuleId="string"==typeof u&&u||"string"==typeof d&&d||null;var a=$(e.location.host,F),s=C(r),l=F.moviePath+w(F.moviePath,F),c='      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%">         <param name="movie" value="'+l+'"/>         <param name="allowScriptAccess" value="'+a+'"/>         <param name="scale" value="exactfit"/>         <param name="loop" value="false"/>         <param name="menu" value="false"/>         <param name="quality" value="best" />         <param name="bgcolor" value="#ffffff"/>         <param name="wmode" value="transparent"/>         <param name="flashvars" value="'+s+'"/>         <embed src="'+l+'"           loop="false" menu="false"           quality="best" bgcolor="#ffffff"           width="100%" height="100%"           name="global-zeroclipboard-flash-bridge"           allowScriptAccess="'+a+'"           allowFullScreen="false"           type="application/x-shockwave-flash"           wmode="transparent"           pluginspage="http://www.macromedia.com/go/getflashplayer"           flashvars="'+s+'"           scale="exactfit">         </embed>       </object>';i=document.createElement("div"),i.id="global-zeroclipboard-html-bridge",i.setAttribute("class","global-zeroclipboard-container"),i.style.position="absolute",i.style.left="0px",i.style.top="-9999px",i.style.width="15px",i.style.height="15px",i.style.zIndex=""+S(F.zIndex),document.body.appendChild(i),i.innerHTML=c}t=document["global-zeroclipboard-flash-bridge"],t&&(n=t.length)&&(t=t[n-1]),o.bridge=t||i.children[0].lastElementChild},z=function(e){for(var t=/^OBJECT|EMBED$/,n=e&&e.parentNode;n&&t.test(n.nodeName)&&n.parentNode;)n=n.parentNode;return n||null},_=function(){if(i){var e=x(i,F.zIndex),t=z(o.bridge);t&&(t.style.top=e.top+"px",t.style.left=e.left+"px",t.style.width=e.width+"px",t.style.height=e.height+"px",t.style.zIndex=e.zIndex+1),!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e.width,e.height):o.ready=!1}return this};R.prototype.on=function(e,t){var n,i,r,a={},l=s[this.id]&&s[this.id].handlers;if("string"==typeof e&&e)r=e.toLowerCase().split(/\s+/);else if("object"==typeof e&&e&&void 0===t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.on(n,e[n]);if(r&&r.length){for(n=0,i=r.length;i>n;n++)e=r[n].replace(/^on/,""),a[e]=!0,l[e]||(l[e]=[]),l[e].push(t);a.noflash&&o.disabled&&U.call(this,"noflash",{}),a.wrongflash&&o.outdated&&U.call(this,"wrongflash",{flashVersion:o.version}),a.load&&o.ready&&U.call(this,"load",{flashVersion:o.version})}return this},R.prototype.off=function(e,t){var n,i,o,r,a,l=s[this.id]&&s[this.id].handlers;if(0===arguments.length)r=L(l);else if("string"==typeof e&&e)r=e.split(/\s+/);else if("object"==typeof e&&e&&void 0===t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.off(n,e[n]);if(r&&r.length)for(n=0,i=r.length;i>n;n++)if(e=r[n].toLowerCase().replace(/^on/,""),(a=l[e])&&a.length)if(t)for(o=T(t,a);-1!==o;)a.splice(o,1),o=T(t,a,o);else l[e].length=0;return this},R.prototype.handlers=function(e){var t,n=null,i=s[this.id]&&s[this.id].handlers;if(i){if("string"==typeof e&&e)return i[e]?i[e].slice(0):null;n={};for(t in i)i.hasOwnProperty(t)&&i[t]&&(n[t]=i[t].slice(0))}return n};var q=function(t,n,i,o){var r=s[this.id]&&s[this.id].handlers[t];if(r&&r.length){var a,l,c,u=n||this;for(a=0,l=r.length;l>a;a++)c=r[a],n=u,"string"==typeof c&&"function"==typeof e[c]&&(c=e[c]),"object"==typeof c&&c&&"function"==typeof c.handleEvent&&(n=c,c=c.handleEvent),"function"==typeof c&&k(c,n,i,o)}return this};R.prototype.clip=function(e){e=E(e);for(var t=0;t<e.length;t++)if(e.hasOwnProperty(t)&&e[t]&&1===e[t].nodeType){e[t].zcClippingId?-1===T(this.id,c[e[t].zcClippingId])&&c[e[t].zcClippingId].push(this.id):(e[t].zcClippingId="zcClippingId_"+l++,c[e[t].zcClippingId]=[this.id],!0===F.autoActivate&&m(e[t],"mouseover",g));var n=s[this.id].elements;-1===T(e[t],n)&&n.push(e[t])}return this},R.prototype.unclip=function(e){var t=s[this.id];if(t){var n,i=t.elements;e=void 0===e?i.slice(0):E(e);for(var o=e.length;o--;)if(e.hasOwnProperty(o)&&e[o]&&1===e[o].nodeType){for(n=0;-1!==(n=T(e[o],i,n));)i.splice(n,1);var r=c[e[o].zcClippingId];if(r){for(n=0;-1!==(n=T(this.id,r,n));)r.splice(n,1);0===r.length&&(!0===F.autoActivate&&v(e[o],"mouseover",g),delete e[o].zcClippingId)}}}return this},R.prototype.elements=function(){var e=s[this.id];return e&&e.elements?e.elements.slice(0):[]};var W=function(e){var t,n,i,o,r,a=[];if(e&&1===e.nodeType&&(t=e.zcClippingId)&&c.hasOwnProperty(t)&&(n=c[t])&&n.length)for(i=0,o=n.length;o>i;i++)(r=s[n[i]].instance)&&r instanceof R&&a.push(r);return a};F.hoverClass="zeroclipboard-is-hover",F.activeClass="zeroclipboard-is-active",F.trustedOrigins=null,F.allowScriptAccess=null,F.useNoCache=!0,F.moviePath="ZeroClipboard.swf",R.detectFlashSupport=function(){return N("ZeroClipboard.detectFlashSupport",F.debug),B()},R.dispatch=function(e,t){if("string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");if(n)for(var o=i&&!0===F.autoActivate?W(i):M(),r=0,a=o.length;a>r;r++)U.call(o[r],n,t)}},R.prototype.setHandCursor=function(e){return N("ZeroClipboard.prototype.setHandCursor",F.debug),e="boolean"==typeof e?e:!!e,H(e),F.forceHandCursor=e,this},R.prototype.reposition=function(){return N("ZeroClipboard.prototype.reposition",F.debug),_()},R.prototype.receiveEvent=function(e,t){if(N("ZeroClipboard.prototype.receiveEvent",F.debug),"string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");n&&U.call(this,n,t)}},R.prototype.setCurrent=function(e){return N("ZeroClipboard.prototype.setCurrent",F.debug),R.activate(e),this},R.prototype.resetBridge=function(){return N("ZeroClipboard.prototype.resetBridge",F.debug),R.deactivate(),this},R.prototype.setTitle=function(e){if(N("ZeroClipboard.prototype.setTitle",F.debug),e=e||F.title||i&&i.getAttribute("title")){var t=z(o.bridge);t&&t.setAttribute("title",e)}return this},R.setDefaults=function(e){N("ZeroClipboard.setDefaults",F.debug),R.config(e)},R.prototype.addEventListener=function(e,t){return N("ZeroClipboard.prototype.addEventListener",F.debug),this.on(e,t)},R.prototype.removeEventListener=function(e,t){return N("ZeroClipboard.prototype.removeEventListener",F.debug),this.off(e,t)},R.prototype.ready=function(){return N("ZeroClipboard.prototype.ready",F.debug),!0===o.ready};var U=function(e,a){e=e.toLowerCase().replace(/^on/,"");var s=a&&a.flashVersion&&t(a.flashVersion)||null,l=i,c=!0;switch(e){case"load":if(s){if(!n(s))return void U.call(this,"onWrongFlash",{flashVersion:s});o.outdated=!1,o.ready=!0,o.version=s}break;case"wrongflash":s&&!n(s)&&(o.outdated=!0,o.ready=!1,o.version=s);break;case"mouseover":y(l,F.hoverClass);break;case"mouseout":!0===F.autoActivate&&R.deactivate();break;case"mousedown":y(l,F.activeClass);break;case"mouseup":b(l,F.activeClass);break;case"datarequested":if(l){var u=l.getAttribute("data-clipboard-target"),d=u?document.getElementById(u):null;if(d){var f=d.value||d.textContent||d.innerText;f&&this.setText(f)}else{var h=l.getAttribute("data-clipboard-text");h&&this.setText(h)}}c=!1;break;case"complete":O(r),l&&l!==I()&&l.focus&&l.focus()}return q.call(this,e,l,[this,a],c)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(e,t,n){return u=n&&n.id||null,R}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof e.require?(d=module.id||null,module.exports=R):e.ZeroClipboard=R}(function(){return this}());var anchors=new AnchorJS;!function(e){"use strict";e(function(){var t=e(window),n=e(document.body);n.scrollspy({target:".docs-sidebar"}),t.on("load",function(){n.scrollspy("refresh")}),e(".docs-container [href=#]").click(function(e){e.preventDefault()}),setTimeout(function(){var t=e(".docs-sidebar");t.affix({offset:{top:function(){var n=t.offset().top,i=parseInt(t.children(0).css("margin-top"),10),o=e(".docs-nav").height();return this.top=n-o-i},bottom:function(){return this.bottom=e(".docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){e(".bs-top").affix()},100),function(){var t=e("#bs-theme-stylesheet"),n=e(".docs-theme-toggle"),i=function(){t.attr("href",t.attr("data-href")),n.text("禁用主题预览"),localStorage.setItem("previewTheme",!0)};localStorage.getItem("previewTheme")&&i(),n.click(function(){var e=t.attr("href");e&&0!==e.indexOf("data")?(t.attr("href",""),n.text("主题预览"),localStorage.removeItem("previewTheme")):i()})}(),e(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),e(".popover-demo").popover({selector:'[data-toggle="popover"]',container:"body"}),e(".tooltip-test").tooltip(),e(".popover-test").popover(),e(".docs-popover").popover(),e("#loading-example-btn").on("click",function(){var t=e(this);t.button("loading"),setTimeout(function(){t.button("reset")},3e3)}),e("#exampleModal").on("show.bs.modal",function(t){var n=e(t.relatedTarget),i=n.data("whatever"),o=e(this);o.find(".modal-title").text("New message to "+i),o.find(".modal-body input").val(i)}),e(".docs-activate-animated-progressbar").on("click",function(){e(this).siblings(".progress").find(".progress-bar-striped").toggleClass("active")}),ZeroClipboard.config({moviePath:"source/ZeroClipboard.swf",hoverClass:"btn-clipboard-hover"}),e(".highlight").each(function(){e(this).before('<div class="zero-clipboard"><span class="btn-clipboard">复制</span></div>')});var i=new ZeroClipboard(e(".btn-clipboard")),o=e("#global-zeroclipboard-html-bridge");i.on("load",function(){o.data("placement","top").attr("title","复制到剪贴板").tooltip(),i.on("dataRequested",function(t){var n=e(this).parent().nextAll(".highlight").first();t.setText(n.text())}),i.on("complete",function(){o.attr("title","复制成功!").tooltip("fixTitle").tooltip("show").attr("title","复制到剪贴板").tooltip("fixTitle")})}),i.on("noflash wrongflash",function(){e(".zero-clipboard").remove(),ZeroClipboard.destroy()})})}(jQuery),function(){"use strict";anchors.options.placement="left",anchors.add(".docs-section > h1, .docs-section > h2, .docs-section > h3, .docs-section > h4, .docs-section > h5")}(),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e;return function e(t,n,i){function o(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(r)return r(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){return o(t[a][1][e]||e)},u,u.exports,e,t,n,i)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(e,t,n){function i(e,t){for(;e&&e.nodeType!==o;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=i},{}],2:[function(e,t,n){function i(e,t,n,i,r){var a=o.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function o(e,t,n,i){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&i.call(e,n)}}var r=e("./closest");t.exports=i},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},{}],4:[function(e,t,n){function i(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!s.string(t))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(e))return o(e,t,n);if(s.nodeList(e))return r(e,t,n);if(s.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var s=e("./is"),l=e("delegate");t.exports=i},{"./is":3,delegate:2}],5:[function(e,t,n){function i(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(e),i.removeAllRanges(),i.addRange(o),t=i.toString()}return t}t.exports=i},{}],6:[function(e,t,n){function i(){}i.prototype={on:function(e,t,n){var i=this.e||(this.e={});return(i[e]||(i[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function i(){o.off(e,i),t.apply(n,arguments)}var o=this;return i._=t,this.on(e,i,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),i=n[e],o=[];if(i&&t)for(var r=0,a=i.length;r<a;r++)i[r].fn!==t&&i[r].fn._!==t&&o.push(i[r]);return o.length?n[e]=o:delete n[e],this}},t.exports=i},{}],7:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if(void 0!==i)r(n,t("select"));else{var a={exports:{}};r(a,o.select),o.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(e){return e&&e.__esModule?e:{default:e}}(t),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=function(){function e(t){n(this,e),this.resolveOptions(t),this.initSelection()}return r(e,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":o(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=a})},{select:5}],8:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,i){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var c=o(t),u=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),p=function(e){function t(e,n){r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.resolveOptions(n),i.listenClick(e),i}return s(t,e),h(t,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===f(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,d.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return l("action",e)}},{key:"defaultTarget",value:function(e){var t=l("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return l("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}(u.default);e.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)});
\ No newline at end of file
diff --git a/static/doc/static/server/controllers/base.js.html b/static/doc/static/server/controllers/base.js.html
index 960f78ff..743b44d8 100644
--- a/static/doc/static/server/controllers/base.js.html
+++ b/static/doc/static/server/controllers/base.js.html
@@ -106,6 +106,9 @@ class baseController {
         return this.$user.role;
     }
 
+    getUsername() {
+        return this.$user.username;
+    }
     /**
      * 
      * @param {*} id type对应的id
diff --git a/static/doc/static/server/controllers/follow.js.html b/static/doc/static/server/controllers/follow.js.html
index d97c8319..3548a736 100644
--- a/static/doc/static/server/controllers/follow.js.html
+++ b/static/doc/static/server/controllers/follow.js.html
@@ -114,7 +114,7 @@ class followController extends baseController {
     /**
      * 添加关注
      * @interface /follow/add
-     * @method POST
+     * @method GET
      * @category follow
      * @foldnumber 10
      * @param {Number} uid 用户id
@@ -131,7 +131,8 @@ class followController extends baseController {
             uid: 'number',
             projectid: 'number',
             projectname: 'string',
-            icon: 'string'
+            icon: 'string',
+            color: 'string'
         });
 
         if (!params.uid) {
@@ -153,17 +154,22 @@ class followController extends baseController {
         if (!params.icon) {
             return ctx.body = yapi.commons.resReturn(null, 400, '项目图标标志不能为空');
         }
+        if (!params.color) {
+            return ctx.body = yapi.commons.resReturn(null, 400, '项目颜色不能为空');
+        }
 
         let data = {
             uid: params.uid,
             projectid: params.projectid,
             projectname: params.projectname,
-            icon: params.icon
+            icon: params.icon,
+            color: params.color
+
         };
 
         try {
             let result = await this.Model.save(data);
-            result = yapi.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon']);
+            result = yapi.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon', 'color']);
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
diff --git a/static/doc/static/server/controllers/log.js.html b/static/doc/static/server/controllers/log.js.html
index 688233b8..5a0d2b5f 100644
--- a/static/doc/static/server/controllers/log.js.html
+++ b/static/doc/static/server/controllers/log.js.html
@@ -59,7 +59,7 @@ class logController extends baseController {
      * @method GET
      * @category log
      * @foldnumber 10
-     * @param {Number} uid 用户id, 不能为空
+     * @param {Number} typeid 动态类型id, 不能为空
      * @param {Number} [page] 分页页码
      * @param {Number} [limit] 分页大小
      * @returns {Object}
@@ -69,15 +69,17 @@ class logController extends baseController {
     async list(ctx) {
         let typeid = ctx.request.query.typeid,
             page = ctx.request.query.page || 1,
-            limit = ctx.request.query.limit || 10;
-
+            limit = ctx.request.query.limit || 10,
+            type = ctx.request.query.type;
         if (!typeid) {
             return ctx.body = yapi.commons.resReturn(null, 400, 'typeid不能为空');
         }
-
+        if(!type) {
+            return ctx.body = yapi.commons.resReturn(null, 400, 'type不能为空');
+        }
         try {
-            let result = await this.Model.listWithPaging(typeid, page, limit);
-            let count = await this.Model.listCount(typeid);
+            let result = await this.Model.listWithPaging(typeid,type, page, limit);
+            let count = await this.Model.listCount(typeid,type);
             
             ctx.body = yapi.commons.resReturn({
                 total: Math.ceil(count / limit),
diff --git a/static/doc/static/server/controllers/project.js.html b/static/doc/static/server/controllers/project.js.html
index b6b4168d..e22d55da 100644
--- a/static/doc/static/server/controllers/project.js.html
+++ b/static/doc/static/server/controllers/project.js.html
@@ -32,6 +32,7 @@ import interfaceModel from '../models/interface.js';
 import groupModel from '../models/group';
 import commons from '../utils/commons.js';
 import userModel from '../models/user.js';
+import logModel from '../models/log.js';
 import Mock from 'mockjs';
 const send = require('koa-send');
 
@@ -41,6 +42,7 @@ class projectController extends baseController {
         super(ctx);
         this.Model = yapi.getInst(projectModel);
         this.groupModel = yapi.getInst(groupModel);
+        this.logModel = yapi.getInst(logModel);
     }
 
     handleBasepath(basepath) {
@@ -146,6 +148,14 @@ class projectController extends baseController {
 
         try {
             let result = await this.Model.save(data);
+            let username = this.getUsername();
+            await this.logModel.save({
+                content: `用户${username}添加了项目${params.name}`,
+                type: 'project',
+                uid: this.getUid(),
+                username: username,
+                typeid: params.group_id
+            });
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -189,6 +199,14 @@ class projectController extends baseController {
 
         try {
             let result = await this.Model.addMember(params.id, userdata);
+            let username = this.getUsername();
+            await this.logModel.save({
+                content: `用户${username}添加了项目成员${userdata.username}`,
+                type: 'project',
+                uid: this.getUid(),
+                username: username,
+                typeid: params.id
+            });
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -226,6 +244,19 @@ class projectController extends baseController {
 
         try {
             let result = await this.Model.delMember(params.id, params.member_uid);
+            let username = this.getUsername();
+            let project = await this.Model.get(params.id);
+            for(let i in project.members){
+                if(i.uid === params.member_uid){
+                    await this.logModel.save({
+                        content: `用户${username}删除了项目${project.name}中的成员${i.username}`,
+                        type: 'project',
+                        uid: this.getUid(),
+                        username: username,
+                        typeid: params.id
+                    });
+                }
+            }
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -392,6 +423,21 @@ class projectController extends baseController {
 
         try {
             let result = await groupInst.changeMemberRole(params.id, params.member_uid, params.role);
+
+            let username = this.getUsername();
+            let project = await this.Model.get(params.id);
+            for(let i in project.members){
+                if(i.uid === params.member_uid){
+                    await this.logModel.save({
+                        content: `用户${username}修改了项目${project.name}中成员${i.username}的角色为${params.role}`,
+                        type: 'project',
+                        uid: this.getUid(),
+                        username: username,
+                        typeid: params.id
+                    });
+                }
+            }
+
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -483,6 +529,16 @@ class projectController extends baseController {
             if (params.env) data.env = params.env;
 
             let result = await this.Model.up(id, data);
+
+            let username = this.getUsername();
+            await this.logModel.save({
+                content: `用户${username}更新了项目${params.name}`,
+                type: 'project',
+                uid: this.getUid(),
+                username: username,
+                typeid: id
+            });
+
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -550,6 +606,7 @@ class projectController extends baseController {
      * @method GET
      * @category project
      * @foldnumber 10
+     * @author wenbo.dong
      * @param {String} project_id
     */
     async download(ctx) {

From 5c91366f3a25bebb39ee89a82498bf70e8a5d920 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 16:30:30 +0800
Subject: [PATCH 05/14] fix: col list bug

---
 .../Interface/InterfaceList/mockEditor.js     | 13 ++++++++-----
 package.json                                  |  1 +
 server/controllers/interfaceCol.js            |  3 +--
 server/models/interface.js                    | 18 ++++++++++++++++--
 server/models/project.js                      |  2 +-
 server_dist/controllers/interfaceCol.js       | 19 +++++++++----------
 server_dist/models/interface.js               | 18 ++++++++++++++++--
 server_dist/models/project.js                 |  2 +-
 static/dev.html                               |  2 +-
 9 files changed, 54 insertions(+), 24 deletions(-)

diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js
index fd0bc4b9..90332287 100644
--- a/client/containers/Project/Interface/InterfaceList/mockEditor.js
+++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js
@@ -1,9 +1,11 @@
 var ace = require('brace'),
   Mock = require('mockjs')
-require('brace/mode/json');
+require('brace/mode/javascript');
 require('brace/theme/xcode');
 require("brace/ext/language_tools.js");
-require("brace/snippets/json.js")
+require("brace/snippets/javascript.js");
+
+var json5 = require('json5');
 
 var langTools = ace.acequire("ace/ext/language_tools"),
   editor,
@@ -70,7 +72,7 @@ function run(options) {
 
   editor = ace.edit(container)
   editor.$blockScrolling = Infinity;
-  editor.getSession().setMode('ace/mode/json');
+  editor.getSession().setMode('ace/mode/javascript');
   editor.setTheme('ace/theme/xcode');
   editor.setOptions({
     enableBasicAutocompletion: true,
@@ -85,7 +87,7 @@ function run(options) {
       if (typeof data === 'string') {
         editor.setValue(data);
       } else if (typeof data === 'object') {
-        editor.setValue(JSON.stringify(data, null, "  "))
+        editor.setValue(json5.stringify(data, null, "  "))
       }
     },
     editor: editor
@@ -122,7 +124,8 @@ function run(options) {
 function handleJson(json) {
   var curData = mockEditor.curData;
   try {
-    var obj = JSON.parse(json);
+    var obj = json5.parse(json);
+    curData.text = json;
     curData.format = true;
     curData.jsonData = obj;
     curData.mockData = Mock.mock(obj);
diff --git a/package.json b/package.json
index 8d42c00d..b148cc87 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
     "gulp-babel": "^6.1.2",
     "gulp-watch": "^4.3.11",
     "json2html": "0.0.8",
+    "json5": "^0.5.1",
     "jsoneditor": "^5.9.3",
     "jsonwebtoken": "^7.4.1",
     "koa": "^2.0.0",
diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js
index 33e43ea0..6e372b2e 100644
--- a/server/controllers/interfaceCol.js
+++ b/server/controllers/interfaceCol.js
@@ -23,8 +23,7 @@ class interfaceColController extends baseController{
     async list(ctx){
         try {
             let id = ctx.query.project_id;
-            let inst = this.colModel(interfaceColModel);
-            let result = await inst.list(id);
+            let result = await this.colModel.list(id);
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
diff --git a/server/models/interface.js b/server/models/interface.js
index 174cfb9f..441e7125 100644
--- a/server/models/interface.js
+++ b/server/models/interface.js
@@ -33,7 +33,7 @@ class interfaceModel extends baseModel {
             }],
             req_body_type: {
                 type: String,
-                enum: ['form', 'json', 'text', 'xml']
+                enum: ['form', 'json', 'text', 'file']
             },
             req_body_form: [{
                 name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
@@ -42,12 +42,26 @@ class interfaceModel extends baseModel {
                     default: "1"
                 }
             }],
+            req_body_json_doc: [{
+                json_path: String, desc: String,required:{
+                    type:String,
+                    enum: ["1", "0"],
+                    default: "1"
+                }
+            }],
             req_body_other: String,
             res_body_type: {
                 type: String,
                 enum: ['json', 'text', 'xml']
             },
-            res_body: String
+            res_body: String,
+            res_body_json_doc: [{
+                json_path: String, desc: String,required:{
+                    type:String,
+                    enum: ["1", "0"],
+                    default: "1"
+                }
+            }]
         };
     }
 
diff --git a/server/models/project.js b/server/models/project.js
index ea3676d9..578589a3 100644
--- a/server/models/project.js
+++ b/server/models/project.js
@@ -60,7 +60,7 @@ class projectModel extends baseModel {
     list(group_id, auth) {
         let params = {group_id: group_id}
         if(!auth) params.project_type = 'public';
-        return this.model.find(params).sort({ _id: -1 }).exec();
+        return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec();
     }
 
     listWithPaging(group_id, page, limit) {
diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js
index 2ec941c0..712693a3 100644
--- a/server_dist/controllers/interfaceCol.js
+++ b/server_dist/controllers/interfaceCol.js
@@ -75,36 +75,35 @@ var interfaceColController = function (_baseController) {
         key: 'list',
         value: function () {
             var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
-                var id, inst, result;
+                var id, result;
                 return _regenerator2.default.wrap(function _callee$(_context) {
                     while (1) {
                         switch (_context.prev = _context.next) {
                             case 0:
                                 _context.prev = 0;
                                 id = ctx.query.project_id;
-                                inst = this.colModel(_interfaceCol2.default);
-                                _context.next = 5;
-                                return inst.list(id);
+                                _context.next = 4;
+                                return this.colModel.list(id);
 
-                            case 5:
+                            case 4:
                                 result = _context.sent;
 
                                 ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context.next = 12;
+                                _context.next = 11;
                                 break;
 
-                            case 9:
-                                _context.prev = 9;
+                            case 8:
+                                _context.prev = 8;
                                 _context.t0 = _context['catch'](0);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message);
 
-                            case 12:
+                            case 11:
                             case 'end':
                                 return _context.stop();
                         }
                     }
-                }, _callee, this, [[0, 9]]);
+                }, _callee, this, [[0, 8]]);
             }));
 
             function list(_x) {
diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js
index 44434ca6..de19d3f0 100644
--- a/server_dist/models/interface.js
+++ b/server_dist/models/interface.js
@@ -72,7 +72,7 @@ var interfaceModel = function (_baseModel) {
                 }],
                 req_body_type: {
                     type: String,
-                    enum: ['form', 'json', 'text', 'xml']
+                    enum: ['form', 'json', 'text', 'file']
                 },
                 req_body_form: [{
                     name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
@@ -81,12 +81,26 @@ var interfaceModel = function (_baseModel) {
                         default: "1"
                     }
                 }],
+                req_body_json_doc: [{
+                    json_path: String, desc: String, required: {
+                        type: String,
+                        enum: ["1", "0"],
+                        default: "1"
+                    }
+                }],
                 req_body_other: String,
                 res_body_type: {
                     type: String,
                     enum: ['json', 'text', 'xml']
                 },
-                res_body: String
+                res_body: String,
+                res_body_json_doc: [{
+                    json_path: String, desc: String, required: {
+                        type: String,
+                        enum: ["1", "0"],
+                        default: "1"
+                    }
+                }]
             };
         }
     }, {
diff --git a/server_dist/models/project.js b/server_dist/models/project.js
index 39c8b360..d0f30aa0 100644
--- a/server_dist/models/project.js
+++ b/server_dist/models/project.js
@@ -101,7 +101,7 @@ var projectModel = function (_baseModel) {
         value: function list(group_id, auth) {
             var params = { group_id: group_id };
             if (!auth) params.project_type = 'public';
-            return this.model.find(params).sort({ _id: -1 }).exec();
+            return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec();
         }
     }, {
         key: 'listWithPaging',
diff --git a/static/dev.html b/static/dev.html
index ad5fe2e7..e4f5b538 100644
--- a/static/dev.html
+++ b/static/dev.html
@@ -18,7 +18,7 @@
 <script src="/lib/snippets-json.js"></script>
 <script src="/lib/ext-language.tools.js"></script>
 <script src="/lib/mode-json-1.2.8.js"></script>
-<!-- <script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> -->
+<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> 
 
 
 

From 231c6036292c5427775c3539b39e21b0ada9b305 Mon Sep 17 00:00:00 2001
From: zwjamnsss <zwjamnsss@gmail.com>
Date: Mon, 14 Aug 2017 17:32:17 +0800
Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E9=9B=86?=
 =?UTF-8?q?=E5=90=88=E8=8F=9C=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../InterfaceCol/InterfaceColMenu.js          | 123 +++++++++++++++++-
 client/reducer/modules/interfaceCol.js        |  63 +++++++++
 client/reducer/modules/reducer.js             |   2 +
 server/controllers/interfaceCol.js            |  76 +++++------
 server_dist/controllers/interfaceCol.js       |  44 +++----
 5 files changed, 247 insertions(+), 61 deletions(-)
 create mode 100644 client/reducer/modules/interfaceCol.js

diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
index 3b103640..dcddedbd 100644
--- a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
+++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js
@@ -1,10 +1,131 @@
 import React, { Component } from 'react'
+import { connect } from 'react-redux';
+import { withRouter } from 'react-router'
+import PropTypes from 'prop-types'
+import { fetchInterfaceColList, fetchInterfaceCaseList } from '../../../../reducer/modules/interfaceCol'
+import { autobind } from 'core-decorators';
+import axios from 'axios';
+import { Menu, Input, Icon, Tag, Modal, Row, Col, message, Tooltip } from 'antd';
+
+const SubMenu = Menu.SubMenu;
+const { TextArea } = Input;
+
+@connect(
+  state => {
+    return {
+      interfaceColList: state.interfaceCol.interfaceColList
+    }
+  },
+  {
+    fetchInterfaceColList,
+    fetchInterfaceCaseList
+  }
+)
+@withRouter
 export default class InterfaceColMenu extends Component {
+
+  static propTypes = {
+    match: PropTypes.object,
+    interfaceColList: PropTypes.array,
+    fetchInterfaceColList: PropTypes.func,
+    fetchInterfaceCaseList: PropTypes.func
+  }
+
+  state = {
+    addColModalVisible: false,
+    addColName: '',
+    addColDesc: ''
+  }
+
   constructor(props) {
     super(props)
   }
 
+  componentWillMount() {
+    this.props.fetchInterfaceColList(this.props.match.params.id)
+  }
+
+  @autobind
+  async addCol() {
+    const { addColName: name, addColDesc: desc } = this.state;
+    const project_id = this.props.match.params.id
+    const res = await axios.post('/api/col/add_col', { name, desc, project_id })
+    if (!res.data.errcode) {
+      this.setState({
+        addColModalVisible: false
+      });
+      message.success('添加集合成功');
+      await this.props.fetchInterfaceColList(project_id);
+    }
+  }
+
+  @autobind
+  async selectCol(key, e, col) {
+    if (!col.interfaceCaseList) {
+      await this.props.fetchInterfaceCaseList(col._id)
+    }
+  }
+
   render() {
-    return <h1>hello colContent</h1>
+    return (
+      <div>
+        <div className="interface-filter">
+          <Input placeholder="Filter by name" style={{ width: "70%" }} />
+          <Tooltip placement="bottom" title="添加集合">
+            <Tag color="#108ee9" style={{ marginLeft: "15px" }} onClick={() => this.setState({addColModalVisible: true})} ><Icon type="plus" /></Tag>
+          </Tooltip>
+        </div>
+        <Menu
+          onClick={this.handleClick}
+          style={{ width: 240 }}
+          defaultSelectedKeys={['1']}
+          defaultOpenKeys={['sub0']}
+          mode="inline"
+        >
+          {
+            this.props.interfaceColList.map((col, index) => (
+              <SubMenu
+                key={`sub${index}`}
+                title={<span><Icon type="folder-open" /><span>{col.name}</span></span>}
+                onTitleClick={(key, e) => this.selectCol(key, e, col)}
+              >
+                {
+                  col.interfaceCaseList && col.interfaceCaseList.map((interfaceCase, index) => (
+                    <Menu.Item key={index}>{interfaceCase.name}</Menu.Item>
+                  ))
+                }
+              </SubMenu>
+            ))
+          }
+        </Menu>
+        <Modal
+          title="添加集合"
+          visible={this.state.addColModalVisible}
+          onOk={this.addCol}
+          onCancel={() => { this.setState({ addColModalVisible: false }) }}
+          className="add-col-modal"
+        >
+          <Row gutter={6} className="modal-input">
+            <Col span="5"><div className="label">集合名:</div></Col>
+            <Col span="15">
+              <Input
+                placeholder="请输入集合名称"
+                value={this.state.addColName}
+                onChange={e => this.setState({addColName: e.target.value})}></Input>
+            </Col>
+          </Row>
+          <Row gutter={6} className="modal-input">
+            <Col span="5"><div className="label">简介:</div></Col>
+            <Col span="15">
+              <TextArea
+                rows={3}
+                placeholder="请输入集合描述"
+                value={this.state.addColDesc}
+                onChange={e => this.setState({addColDesc: e.target.value})}></TextArea>
+            </Col>
+          </Row>
+        </Modal>
+      </div>
+    )
   }
 }
diff --git a/client/reducer/modules/interfaceCol.js b/client/reducer/modules/interfaceCol.js
new file mode 100644
index 00000000..3e1a0bec
--- /dev/null
+++ b/client/reducer/modules/interfaceCol.js
@@ -0,0 +1,63 @@
+import axios from 'axios'
+// Actions
+const FETCH_INTERFACE_COL_LIST = 'yapi/interfaceCol/FETCH_INTERFACE_COL_LIST';
+const FETCH_INTERFACE_CASE_LIST = 'yapi/interfaceCol/FETCH_INTERFACE_CASE_LIST';
+
+// Reducer
+const initialState = {
+  interfaceColList: [{
+    _id: 0,
+    name: '',
+    uid: 0,
+    project_id: 0,
+    desc: '',
+    add_time: 0,
+    up_time: 0,
+    interfaceCaseList: [
+      {}
+    ]
+  }],
+  isShowCol: true,
+  currInterfaceColId: 0,
+  currInterfaceCaseId: 0
+}
+
+export default (state = initialState, action) => {
+  switch (action.type) {
+    case FETCH_INTERFACE_COL_LIST:
+      return {
+        ...state,
+        interfaceColList: action.payload.data.data
+      }
+    case FETCH_INTERFACE_CASE_LIST: {
+      const interfaceCaseList = state.interfaceColList.map(col => {
+        if (col._id === state.currInterfaceColId) {
+          return col.interfaceCaseList = action.payload.data.data;
+        }
+        return col;
+      })
+      return {
+        ...state,
+        interfaceCaseList
+      }
+    }
+    default:
+      return state
+  }
+}
+
+
+// Action Creators
+export function fetchInterfaceColList (projectId) {
+  return {
+    type: FETCH_INTERFACE_COL_LIST,
+    payload: axios.get('/api/col/list?project_id=' + projectId)
+  }
+}
+
+export function fetchInterfaceCaseList(colId){
+  return {
+    type: FETCH_INTERFACE_CASE_LIST,
+    payload: axios.get('/api/col/case_list?col_id=' + colId)
+  }
+}
diff --git a/client/reducer/modules/reducer.js b/client/reducer/modules/reducer.js
index c3623d73..267a2e6b 100644
--- a/client/reducer/modules/reducer.js
+++ b/client/reducer/modules/reducer.js
@@ -3,6 +3,7 @@ import user from './user.js'
 import group from './group.js'
 import project from './project.js'
 import inter from './interface.js'
+import interfaceCol from './interfaceCol.js'
 import news from './news.js'
 import addInterface from './addInterface.js'
 import menu from './menu.js'
@@ -11,6 +12,7 @@ export default combineReducers({
   group,
   user,
   inter,
+  interfaceCol,
   project,
   news,
   addInterface,
diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js
index 33e43ea0..a563f4be 100644
--- a/server/controllers/interfaceCol.js
+++ b/server/controllers/interfaceCol.js
@@ -17,13 +17,13 @@ class interfaceColController extends baseController{
      * @category col
      * @foldnumber 10
      * @param {String} project_id email名称,不能为空
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
     async list(ctx){
         try {
             let id = ctx.query.project_id;
-            let inst = this.colModel(interfaceColModel);
+            let inst = yapi.getInst(interfaceColModel);
             let result = await inst.list(id);
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
@@ -40,8 +40,8 @@ class interfaceColController extends baseController{
      * @param {Number} project_id
      * @param {String} name
      * @param {String} desc
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async addCol(ctx){
@@ -52,14 +52,14 @@ class interfaceColController extends baseController{
                 project_id: 'number',
                 desc: 'string'
             });
-            
+
             if (!params.project_id) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');                
+                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
             }
             if(!params.name){
-                return ctx.body = yapi.commons.resReturn(null, 400, '名称不能为空');            
+                return ctx.body = yapi.commons.resReturn(null, 400, '名称不能为空');
             }
-            
+
             let result = await this.colModel.save({
                 name: params.name,
                 project_id: params.project_id,
@@ -82,8 +82,8 @@ class interfaceColController extends baseController{
      * @category col
      * @foldnumber 10
      * @param {String} col_id 接口集id
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async getCaseList(ctx){
@@ -106,17 +106,17 @@ class interfaceColController extends baseController{
      * @param {String} casename
      * @param {Number} col_id
      * @param {Number} project_id
-     * @param {String} env  
+     * @param {String} env
      * @param {String} domain
      * @param {String} path
      * @param {String} method
      * @param {Object} req_query
      * @param {Object} req_headers
      * @param {String} req_body_type
-     * @param {Array} req_body_form 
+     * @param {Array} req_body_form
      * @param {String} req_body_other
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async addCase(ctx){
@@ -130,23 +130,23 @@ class interfaceColController extends baseController{
                 domain: 'string',
                 method: 'string'
             });
-            
+
             if (!params.project_id) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');                
+                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
             }
             if (!params.col_id) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');                
+                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');
             }
             if (!params.env) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置');                
+                return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置');
             }
             if (!params.path) {
-                return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空');                
+                return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空');
             }
-          
-   
+
+
             if(!params.casename){
-                return ctx.body = yapi.commons.resReturn(null, 400, '用例名称不能为空');            
+                return ctx.body = yapi.commons.resReturn(null, 400, '用例名称不能为空');
             }
 
             params.uid = this.getUid();
@@ -154,7 +154,7 @@ class interfaceColController extends baseController{
             params.add_time = yapi.commons.time();
             params.up_time = yapi.commons.time();
             let result = await this.caseModel.save(params);
-            
+
             ctx.body = yapi.commons.resReturn(result);
 
         }catch(e){
@@ -169,8 +169,8 @@ class interfaceColController extends baseController{
      * @category col
      * @foldnumber 10
      * @param {String} caseid
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async getCase(ctx){
@@ -191,8 +191,8 @@ class interfaceColController extends baseController{
      * @foldnumber 10
      * @param {String} name
      * @param {String} desc
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async upCol(ctx){
@@ -216,8 +216,8 @@ class interfaceColController extends baseController{
      * @category col
      * @foldnumber 10
      * @param {Array}  [id, index]
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
     async upCaseIndex(ctx){
@@ -232,9 +232,9 @@ class interfaceColController extends baseController{
                         yapi.commons.log(err.message, 'error')
                     })
                 }
-                
+
             })
-            
+
             return ctx.body = yapi.commons.resReturn('success')
         }catch(e){
             ctx.body = yapi.commons.resReturn(null, 400, e.message)
@@ -247,9 +247,9 @@ class interfaceColController extends baseController{
      * @method GET
      * @category col
      * @foldnumber 10
-     * @param {String} 
-     * @returns {Object} 
-     * @example 
+     * @param {String}
+     * @returns {Object}
+     * @example
      */
 
     async delCol(ctx){
@@ -277,8 +277,8 @@ class interfaceColController extends baseController{
     }
 
     /**
-     * 
-     * @param {*} ctx 
+     *
+     * @param {*} ctx
      */
 
     async delCase(ctx){
@@ -308,4 +308,4 @@ class interfaceColController extends baseController{
 
 }
 
-module.exports = interfaceColController
\ No newline at end of file
+module.exports = interfaceColController
diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js
index 2ec941c0..b46076b7 100644
--- a/server_dist/controllers/interfaceCol.js
+++ b/server_dist/controllers/interfaceCol.js
@@ -66,8 +66,8 @@ var interfaceColController = function (_baseController) {
      * @category col
      * @foldnumber 10
      * @param {String} project_id email名称,不能为空
-     * @returns {Object} 
-     * @example 
+     * @returns {Object}
+     * @example
      */
 
 
@@ -82,7 +82,7 @@ var interfaceColController = function (_baseController) {
                             case 0:
                                 _context.prev = 0;
                                 id = ctx.query.project_id;
-                                inst = this.colModel(_interfaceCol2.default);
+                                inst = _yapi2.default.getInst(_interfaceCol2.default);
                                 _context.next = 5;
                                 return inst.list(id);
 
@@ -123,8 +123,8 @@ var interfaceColController = function (_baseController) {
          * @param {Number} project_id
          * @param {String} name
          * @param {String} desc
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -207,8 +207,8 @@ var interfaceColController = function (_baseController) {
          * @category col
          * @foldnumber 10
          * @param {String} col_id 接口集id
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -263,17 +263,17 @@ var interfaceColController = function (_baseController) {
          * @param {String} casename
          * @param {Number} col_id
          * @param {Number} project_id
-         * @param {String} env  
+         * @param {String} env
          * @param {String} domain
          * @param {String} path
          * @param {String} method
          * @param {Object} req_query
          * @param {Object} req_headers
          * @param {String} req_body_type
-         * @param {Array} req_body_form 
+         * @param {Array} req_body_form
          * @param {String} req_body_other
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -382,8 +382,8 @@ var interfaceColController = function (_baseController) {
          * @category col
          * @foldnumber 10
          * @param {String} caseid
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -436,8 +436,8 @@ var interfaceColController = function (_baseController) {
          * @foldnumber 10
          * @param {String} name
          * @param {String} desc
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -493,8 +493,8 @@ var interfaceColController = function (_baseController) {
          * @category col
          * @foldnumber 10
          * @param {Array}  [id, index]
-         * @returns {Object} 
-         * @example 
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -551,9 +551,9 @@ var interfaceColController = function (_baseController) {
          * @method GET
          * @category col
          * @foldnumber 10
-         * @param {String} 
-         * @returns {Object} 
-         * @example 
+         * @param {String}
+         * @returns {Object}
+         * @example
          */
 
     }, {
@@ -625,8 +625,8 @@ var interfaceColController = function (_baseController) {
         }()
 
         /**
-         * 
-         * @param {*} ctx 
+         *
+         * @param {*} ctx
          */
 
     }, {

From ff0f9b575c0746101da7b7f5b96623f1ea3cf937 Mon Sep 17 00:00:00 2001
From: zwjamnsss <zwjamnsss@gmail.com>
Date: Mon, 14 Aug 2017 19:23:20 +0800
Subject: [PATCH 07/14] =?UTF-8?q?feat:=20run=20=E9=83=A8=E5=88=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Project/Interface/InterfaceList/Run.js    | 514 +++++++++++++++++-
 .../Project/Interface/InterfaceList/Run.scss  |  18 +
 2 files changed, 528 insertions(+), 4 deletions(-)
 create mode 100644 client/containers/Project/Interface/InterfaceList/Run.scss

diff --git a/client/containers/Project/Interface/InterfaceList/Run.js b/client/containers/Project/Interface/InterfaceList/Run.js
index 3aa0a3ae..b71db814 100644
--- a/client/containers/Project/Interface/InterfaceList/Run.js
+++ b/client/containers/Project/Interface/InterfaceList/Run.js
@@ -1,5 +1,511 @@
-import React from 'react'
+import React, { Component } from 'react'
+import PropTypes from 'prop-types'
+import { connect } from 'react-redux'
+import { Button, Input, Select, Card, Alert, Spin, Icon, message } from 'antd'
+import { autobind } from 'core-decorators';
+import crossRequest from 'cross-request';
+import { withRouter } from 'react-router';
+import axios from 'axios';
+import URL from 'url';
 
-export default () => {
-  return <h1>接口Run</h1>
-}
\ No newline at end of file
+// import {
+// } from '../../../reducer/modules/group.js'
+
+import './Run.scss'
+
+const { TextArea } = Input;
+const InputGroup = Input.Group;
+const Option = Select.Option;
+
+@connect(
+  state => ({
+    reqParams: state.addInterface.reqParams,
+    method: state.addInterface.method,
+    url: state.addInterface.url,
+    seqGroup: state.addInterface.seqGroup,
+    interfaceName: state.addInterface.interfaceName,
+    interfaceProject: state.addInterface.project
+  })
+)
+@withRouter
+export default class InterfaceTest extends Component {
+
+  static propTypes = {
+    reqParams: PropTypes.string,
+    method: PropTypes.string,
+    url: PropTypes.string,
+    interfaceName: PropTypes.string,
+    seqGroup: PropTypes.array,
+    match: PropTypes.object,
+    interfaceProject: PropTypes.object
+  }
+
+  state = {
+    res: '',
+    method: 'GET',
+    domains: [],
+    pathname: '',
+    query: {},
+    params: {},
+    paramsNotJson: false,
+    headers: {},
+    currDomain: '',
+    paramsType: 'from'
+  }
+
+  constructor(props) {
+    super(props)
+  }
+
+  componentWillMount() {
+    this.getInterfaceState()
+  }
+
+  componentWillReceiveProps(nextProps) {
+    this.getInterfaceState(nextProps)
+  }
+
+  @autobind
+  getInterfaceState(nextProps) {
+    const props = nextProps || this.props;
+    const { method, url, seqGroup, interfaceProject } = props;
+    const { prd_host, basepath, protocol, env } = interfaceProject;
+    const pathname = (basepath + url).replace(/\/+/g, '/');
+
+    const domains = {prd: protocol + '://' + prd_host};
+    env.forEach(item => {
+      domains[item.name] = item.domain;
+    })
+
+    const query = [];
+    let params = [];
+    let reqParams = this.props.reqParams ? this.props.reqParams : '{}';
+    let paramsNotJson = false;
+    try {
+      reqParams = JSON.parse(reqParams);
+      // paramsNotJson = false;
+    } catch (e) {
+      // paramsNotJson = true;
+      reqParams = {};
+      message.error('请求参数不是 JSON 格式');
+    }
+    if (method === 'GET') {
+      Object.keys(reqParams).forEach(key => {
+        const value = typeof reqParams[key] === 'object' ? JSON.stringify(reqParams[key]) : reqParams[key].toString();
+        query.push({key, value})
+      })
+    } else if (method === 'POST') {
+      // params = reqParams;
+      Object.keys(reqParams).forEach(key => {
+        const value = typeof reqParams[key] === 'object' ? JSON.stringify(reqParams[key]) : reqParams[key].toString();
+        query.push({key, value, type: 'text'})
+      })
+    }
+
+    const headers = []
+    let contentTypeIndex = -1;
+    seqGroup.forEach((headerItem, index) => {
+      if (headerItem.name) {
+        // TODO 'Content-Type' 排除大小写不同格式影响
+        if (headerItem.name === 'Content-Type'){
+          contentTypeIndex = index;
+          headerItem.value = headerItem.value || 'application/x-www-form-urlencoded';
+        }
+        headers.push({name: headerItem.name, value: headerItem.value});
+      }
+    })
+    if (contentTypeIndex === -1) {
+      headers.push({name: 'Content-Type', value: 'application/x-www-form-urlencoded'});
+    }
+
+    this.setState({
+      method,
+      domains,
+      pathname,
+      query,
+      params,
+      paramsNotJson,
+      headers,
+      currDomain: domains.prd,
+      loading: false,
+      paramsType: 'form'
+    });
+  }
+
+  @autobind
+  requestInterface() {
+    const { headers, params, currDomain, method, pathname, query } = this.state;
+    const urlObj = URL.parse(currDomain);
+
+    const href = URL.format({
+      protocol: urlObj.protocol || 'http',
+      host: urlObj.host,
+      pathname,
+      query: this.getQueryObj(query)
+    });
+
+    this.setState({ loading: true })
+
+    crossRequest({
+      url: href,
+      method,
+      headers: this.getHeadersObj(headers),
+      data: this.arrToObj(params),
+      files: this.getFiles(params),
+      success: (res) => {
+        try {
+          res = JSON.parse(res)
+        } catch (e) {
+          null
+        }
+        this.setState({res})
+        this.setState({ loading: false })
+      },
+      error: (err) => {
+        this.setState({res: err || '请求失败'})
+        this.setState({ loading: false })
+      }
+    })
+  }
+
+  @autobind
+  changeDomain(value) {
+    this.setState({ currDomain: value });
+  }
+
+  @autobind
+  selectDomain(value) {
+    this.setState({ currDomain: value });
+  }
+
+  @autobind
+  changeHeader(e, index, isName) {
+    const headers = JSON.parse(JSON.stringify(this.state.headers));
+    const v = e.target.value;
+    if (isName) {
+      headers[index].name = v;
+    } else {
+      headers[index].value = v;
+    }
+    this.setState({ headers });
+  }
+  @autobind
+  addHeader() {
+    const { headers } = this.state;
+    this.setState({headers: headers.concat([{name: '', value: ''}])})
+  }
+  @autobind
+  deleteHeader(index) {
+    const { headers } = this.state;
+    this.setState({headers: headers.filter((item, i) => +index !== +i)});
+  }
+  @autobind
+  setContentType(type) {
+    const headersObj = this.getHeadersObj(this.state.headers);
+    headersObj['Content-Type'] = type;
+    this.setState({headers: this.objToArr(headersObj, 'name')})
+  }
+
+  @autobind
+  changeQuery(e, index, isKey) {
+    const query = JSON.parse(JSON.stringify(this.state.query));
+    const v = e.target.value;
+    if (isKey) {
+      query[index].key = v;
+    } else {
+      query[index].value = v;
+    }
+    this.setState({ query });
+  }
+  @autobind
+  addQuery() {
+    const { query } = this.state;
+    this.setState({query: query.concat([{key: '', value: ''}])})
+  }
+  @autobind
+  deleteQuery(index) {
+    const { query } = this.state;
+    this.setState({query: query.filter((item, i) => +index !== +i)});
+  }
+
+  @autobind
+  changeParams(e, index, type) {
+    const params = JSON.parse(JSON.stringify(this.state.params));
+    switch (type) {
+      case 'key':
+        params[index].key = e.target.value
+        break;
+      case 'type':
+        params[index].type = e
+        break;
+      case 'value':
+        if (params[index].type === 'file') {
+          params[index].value = e.target.id
+        } else {
+          params[index].value = e.target.value
+        }
+        break;
+      default:
+        break;
+    }
+    if (type === 'type' && e === 'file') {
+      this.setContentType('multipart/form-data')
+    }
+    this.setState({ params });
+  }
+  @autobind
+  addParams() {
+    const { params } = this.state;
+    this.setState({params: params.concat([{key: '', value: '', type: 'text'}])})
+  }
+  @autobind
+  deleteParams(index) {
+    const { params } = this.state;
+    this.setState({params: params.filter((item, i) => +index !== +i)});
+  }
+
+  @autobind
+  changeMethod(value) {
+    this.setState({ method: value });
+  }
+
+  @autobind
+  changePath(e) {
+    const path = e.target.value;
+    const urlObj = URL.parse(path, true);
+    this.setState({
+      query: this.objToArr(urlObj.query),
+      pathname: urlObj.pathname
+    })
+  }
+
+  @autobind
+  changeParamsType(value) {
+    this.setState({paramsType: value})
+  }
+
+  hasCrossRequestPlugin() {
+    const dom = document.getElementById('y-request');
+    return dom.getAttribute('key') === 'yapi';
+  }
+
+  objToArr(obj, key, value) {
+    const keyName = key || 'key';
+    const valueName = value || 'value';
+    const arr = []
+    Object.keys(obj).forEach((_key) => {
+      if (_key) {
+        arr.push({[keyName]: _key, [valueName]: obj[_key]});
+      }
+    })
+    return arr;
+  }
+  arrToObj(arr) {
+    const obj = {};
+    arr.forEach(item => {
+      if (item.key && item.type !== 'file') {
+        obj[item.key] = item.value || '';
+      }
+    })
+    return obj;
+  }
+  getFiles(params) {
+    const files = {};
+    params.forEach(item => {
+      if (item.key && item.type === 'file') {
+        files[item.key] = item.value
+      }
+    })
+    return files;
+  }
+  getQueryObj(query) {
+    const queryObj = {};
+    query.forEach(item => {
+      if (item.key) {
+        queryObj[item.key] = item.value || '';
+      }
+    })
+    return queryObj;
+  }
+  getHeadersObj(headers) {
+    const headersObj = {};
+    headers.forEach(item => {
+      if (item.name && item.value) {
+        headersObj[item.name] = item.value;
+      }
+    })
+    return headersObj;
+  }
+
+  @autobind
+  fileChange(e, index) {
+    console.log(e)
+    console.log(index)
+  }
+
+  render () {
+
+    const { interfaceName } = this.props;
+    const { method, domains, pathname, query, headers, params, currDomain, paramsType } = this.state;
+    const hasPlugin = this.hasCrossRequestPlugin();
+    const search = decodeURIComponent(URL.format({query: this.getQueryObj(query)}));
+
+    console.log(axios)
+    window.axios = axios
+
+
+    return (
+      <div className="interface-test">
+        <div style={{padding: '0 20%'}}>
+          { hasPlugin ? '' :
+          <Alert
+            message={
+              <div>
+                温馨提示:当前正在使用接口测试服务,请安装我们为您免费提供的&nbsp;
+                <a
+                  target="blank"
+                  href="https://chrome.google.com/webstore/detail/cross-request/cmnlfmgbjmaciiopcgodlhpiklaghbok?hl=en-US"
+                >
+                  测试增强插件 [点击获取]!
+                </a>
+              </div>
+            }
+            type="warning"
+          />
+          }
+        </div>
+        <div className="interface-name">{interfaceName}</div>
+
+        {/* url */}
+        <div className="req-part">
+          <div className="req-row href">
+            <InputGroup compact style={{display: 'inline-block', width: 680, border: 0, background: '#fff', marginBottom: -4}}>
+              <Input value="Method" disabled style={{display: 'inline-block', width: 80, border: 0, background: '#fff'}} />
+              <Input value="Domain" disabled style={{display: 'inline-block', width: 300, border: 0, background: '#fff'}} />
+              <Input value="Basepath + Url + [Query]" disabled style={{display: 'inline-block', width: 300, border: 0, background: '#fff'}} />
+            </InputGroup>
+            <InputGroup compact style={{display: 'inline-block', width: 680}}>
+              <Select value={method} style={{display: 'inline-block', width: 80}} onChange={this.changeMethod} >
+                <Option value="GET">GET</Option>
+                <Option value="POST">POST</Option>
+              </Select>
+              <Select value={currDomain} mode="combobox" filterOption={() => true} style={{display: 'inline-block', width: 300}} onChange={this.changeDomain} onSelect={this.selectDomain}>
+                {
+                  Object.keys(domains).map((key, index) => (<Option value={domains[key]} key={index}>{key + ':' + domains[key]}</Option>))
+                }
+              </Select>
+              <Input value={pathname + search} onChange={this.changePath} spellCheck="false" style={{display: 'inline-block', width: 300}} />
+            </InputGroup>
+            <Button
+              onClick={this.requestInterface}
+              type="primary"
+              style={{marginLeft: 10}}
+              loading={this.state.loading}
+            >发送</Button>
+            <span style={{fontSize: 12, color: 'rgba(0, 0, 0, 0.25)'}}>(请求测试真实接口)</span>
+          </div>
+
+          <Card title="Query" noHovering style={{marginTop: 10}}>
+            {
+              query.map((item, index) => {
+                return (
+                  <div key={index}>
+                    <Input value={item.key} onChange={e => this.changeQuery(e, index, true)} style={{display: 'inline-block', width: 200, margin: 10}} />{' = '}
+                    <Input value={item.value} onChange={e => this.changeQuery(e, index)} style={{display: 'inline-block', width: 200, margin: 10}} />
+                    <Icon type="close" className="icon-btn" onClick={() => this.deleteQuery(index)} />
+                  </div>
+                )
+              })
+            }
+            <Button type="primary" icon="plus" onClick={this.addQuery} style={{margin: 10}}>Add query parameter</Button>
+          </Card>
+          <Card title="HEADERS" noHovering style={{marginTop: 10}} >
+            <div className="req-row headers">
+              {
+                headers.map((item, index) => {
+                  return (
+                    <div key={index}>
+                      <Input value={item.name} onChange={e => this.changeHeader(e, index, true)} style={{display: 'inline-block', width: 200, margin: 10}} />{' = '}
+                      <Input value={item.value} onChange={e => this.changeHeader(e, index)} style={{display: 'inline-block', width: 200, margin: 10}} />
+                      <Icon type="close" className="icon-btn" onClick={() => this.deleteHeader(index)} />
+                    </div>
+                  )
+                })
+              }
+              <Button type="primary" icon="plus" onClick={this.addHeader} style={{margin: 10}}>Add header</Button>
+            </div>
+          </Card>
+          <Card title="Body" noHovering style={{marginTop: 10}}>
+            <div className="req-row params">
+              <div>
+                <Select style={{margin: 10, float: 'right'}} defaultValue={paramsType} onChange={this.changeParamsType} className={method === 'POST' ? 'floatfix' : 'floatfix hidden'}>
+                  <Option value="text">Text</Option>
+                  <Option value="file">File</Option>
+                  <Option value="form">Form</Option>
+                </Select>
+              </div>
+              { method === 'POST' && paramsType !== 'form' && paramsType !== 'file' &&
+                <div>
+                  <TextArea
+                    value={params}
+                    style={{margin: 10}}
+                    autosize={{ minRows: 2, maxRows: 6 }}
+                  ></TextArea>
+                  <div>{paramsType}</div>
+                </div>
+              }
+              {
+                method === 'POST' && paramsType === 'form' && (
+                  <div>
+                    {
+                      params.map((item, index) => {
+                        return (
+                          <div key={index}>
+                            <Input value={item.key} onChange={e => this.changeParams(e, index, 'key')} style={{display: 'inline-block', width: 200, margin: 10}} />
+                            [<Select value={item.type} onChange={e => this.changeParams(e, index, 'type')}>
+                              <Option value="file">File</Option>
+                              <Option value="text">Text</Option>
+                            </Select>]{' = '}
+                            {item.type === 'file' ?
+                              <Input type="file" id={'file_' + index} onChange={e => this.changeParams(e, index, 'value')} multiple style={{display: 'inline-block', width: 200, margin: 10}} /> :
+                              <Input value={item.value} onChange={e => this.changeParams(e, index, 'value')} style={{display: 'inline-block', width: 200, margin: 10}} />
+                            }
+                          </div>
+                        )
+                      })
+                    }
+                    <Button type="primary" icon="plus" onClick={this.addParams} style={{margin: 10}}>Add form parameter</Button>
+                  </div>
+                )
+              }
+              {
+                method === 'POST' && paramsType === 'file' && (
+                  <div>
+                    <Input type="file"></Input>
+                  </div>
+                )
+              }
+              {
+                method !== 'POST' && (
+                  <div style={{margin: 10}}>GET 请求没有 Body。</div>
+                )
+              }
+            </div>
+          </Card>
+        </div>
+        <Card title="返回结果" noHovering style={{marginTop: 10}}>
+          <Spin spinning={this.state.loading}>
+            <div className="res-part">
+              <div style={{padding: 10}}>
+                <TextArea
+                  value={typeof this.state.res === 'object' ? JSON.stringify(this.state.res, null, 2) : this.state.res.toString()}
+                  autosize={{ minRows: 2, maxRows: 6 }}
+                ></TextArea>
+              </div>
+            </div>
+          </Spin>
+        </Card>
+      </div>
+    )
+  }
+}
diff --git a/client/containers/Project/Interface/InterfaceList/Run.scss b/client/containers/Project/Interface/InterfaceList/Run.scss
new file mode 100644
index 00000000..a5f2179f
--- /dev/null
+++ b/client/containers/Project/Interface/InterfaceList/Run.scss
@@ -0,0 +1,18 @@
+.interface-test {
+  .interface-name {
+    font-size: 24px;
+    margin-bottom: 24px;
+  }
+  .icon-btn {
+    cursor: pointer;
+    margin-left: 6px;
+  }
+  .icon-btn:hover {
+    color: #108ee9;
+  }
+}
+.floatfix:after{
+    content:"";
+    display:table;
+    clear:both;
+}

From fa510e96087f95db33ff72549d859e4495e6dcf0 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 19:58:33 +0800
Subject: [PATCH 08/14] feat: add interface res some module

---
 client/components/Header/Header.js            |   2 +-
 .../InterfaceList/InterfaceEditForm.js        | 112 ++++++++++++++----
 .../Interface/InterfaceList/mockEditor.js     |   7 +-
 server/controllers/interfaceCol.js            |  13 +-
 server/models/interface.js                    |  16 +--
 server/models/interfaceCase.js                |  12 +-
 server_dist/controllers/interfaceCol.js       |  70 +++++------
 server_dist/models/interface.js               |  16 +--
 server_dist/models/interfaceCase.js           |  12 +-
 9 files changed, 155 insertions(+), 105 deletions(-)

diff --git a/client/components/Header/Header.js b/client/components/Header/Header.js
index f33a980b..d7ae2071 100644
--- a/client/components/Header/Header.js
+++ b/client/components/Header/Header.js
@@ -165,7 +165,7 @@ export default class HeaderCom extends Component {
       <Header className="header-box m-header">
         <div className="content g-row">
           <div className="logo">
-            <Link to="/" onClick={this.relieveLink} className="href">
+            <Link to="/group" onClick={this.relieveLink} className="href">
               <img className="img" src="/image/logo_header@1x.png" /><span className="logo-name">YAPI<span className="ui-badge"></span></span>
             </Link>
           </div>
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
index 46819cb3..2219bddf 100644
--- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
@@ -35,13 +35,15 @@ class InterfaceEditForm extends Component {
       req_body_type: 'form',
       req_headers: [{
         name: 'Content-Type',
-        value: 'application/urlencode', required: "1"
+        value: 'application/x-www-form-urlencoded', required: "1"
       }],
       req_body_form: [{
         name: 'id',
         type: 'text',
         required: '1'
-      }]
+      }],
+      res_body_type: 'json',
+      res_body: ''
     }
   }
 
@@ -50,20 +52,29 @@ class InterfaceEditForm extends Component {
     this.props.form.validateFields((err, values) => {
       if (!err) {
         console.log('Received values of form: ', values);
-        console.log(this.props.form.getFieldValue('keys'))
       }
     });
   }
 
   componentDidMount() {
+    let that = this;
     mockEditor({
       container: 'req_body_json',
-      data: {
-        name: "@name"
-      },
+      data: that.state.req_body_json,
       onChange: function (d) {
-        console.log(this)
-        console.log(d)
+        that.setState({
+          req_body_json: d.text
+        })
+      }
+    })
+
+    mockEditor({
+      container: 'res_body_json',
+      data: that.state.res_body,
+      onChange: function (d) {
+        that.setState({
+          res_body: d.text
+        })
       }
     })
   }
@@ -294,33 +305,94 @@ class InterfaceEditForm extends Component {
               <Radio value="form">form</Radio>
               <Radio value="json">json</Radio>
               <Radio value="file">file</Radio>
+              <Radio value="raw">raw</Radio>
             </RadioGroup>
             )}
 
         </FormItem>
+        {this.props.form.getFieldValue('req_body_type') === 'form' ?
+          <Row >
+            <Col span={14} offset={6} style={{ minHeight: "50px", padding: "15px" }}>
+              <Row>
+                <Col span="24">
 
-        <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'form' ? 'block' : 'none' }}>
-          <Col span={14} offset={6} style={{ minHeight: "300px", padding: "15px" }}>
-            <Row>
-              <Col span="24">
+                  <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button>
 
-                <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button>
+                </Col>
 
-              </Col>
+              </Row>
+              {requestBodyList}
+            </Col>
 
-            </Row>
-            {requestBodyList}
-          </Col>
+          </Row>
+          :
+          null
+        }
 
-        </Row>
 
         <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}>
-          <Col span={14} offset={6} id="req_body_json"  style={{ minHeight: "300px", padding: "15px" }}>
-            
+          <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}>
+          </Col>
+        </Row>
+
+        {this.props.form.getFieldValue('req_body_type') === 'file' ?
+          <Row >
+            <Col span={14} offset={6} style={{ padding: "15px" }}>
+              {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })(
+                <Input.TextArea placeholder="备注信息" />
+              )}
+            </Col>
+
+
+          </Row>
+          :
+          null
+        }
+        {this.props.form.getFieldValue('req_body_type') === 'raw' ?
+          <Row>
+            <Col span={14} offset={6} style={{ padding: "15px" }}>
+              {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })(
+                <Input.TextArea placeholder="备注信息" />
+              )}
+            </Col>
+          </Row>
+          : null
+        }
+
+        <FormItem style={{ marginBottom: "5px" }}
+          {...formItemLayout}
+          label="响应Body"
+        >
+          {getFieldDecorator('res_body_type', {
+            initialValue: this.state.res_body_type
+          })(
+            <RadioGroup>
+              <Radio value="json">json</Radio>
+              <Radio value="raw">raw</Radio>
+
+            </RadioGroup>
+            )}
+
+        </FormItem>
+        <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}>
+          <Col span={14} offset={6} id="res_body_json" style={{ minHeight: "300px", padding: "15px" }}>
+
           </Col>
 
 
         </Row>
+
+        <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}>
+          <Col span={14} offset={6} style={{ padding: "15px" }}>
+            {getFieldDecorator('req_body_other', { initialValue: this.state.res_body })(
+              <Input.TextArea placeholder="备注信息" />
+            )}
+          </Col>
+
+
+        </Row>
+
+
         <FormItem
           wrapperCol={{ span: 12, offset: 6 }}
         >
diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js
index 90332287..f7c01589 100644
--- a/client/containers/Project/Interface/InterfaceList/mockEditor.js
+++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js
@@ -3,8 +3,6 @@ var ace = require('brace'),
 require('brace/mode/javascript');
 require('brace/theme/xcode');
 require("brace/ext/language_tools.js");
-require("brace/snippets/javascript.js");
-
 var json5 = require('json5');
 
 var langTools = ace.acequire("ace/ext/language_tools"),
@@ -76,8 +74,9 @@ function run(options) {
   editor.setTheme('ace/theme/xcode');
   editor.setOptions({
     enableBasicAutocompletion: true,
-    enableSnippets: true,
-    enableLiveAutocompletion: true
+    enableSnippets: false,
+    enableLiveAutocompletion: true,
+    useWorker: false
   });
   mockEditor = {
     curData: {},
diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js
index 6e372b2e..5196ae6e 100644
--- a/server/controllers/interfaceCol.js
+++ b/server/controllers/interfaceCol.js
@@ -24,6 +24,11 @@ class interfaceColController extends baseController{
         try {
             let id = ctx.query.project_id;
             let result = await this.colModel.list(id);
+            
+            for(let i=0; i< result.length;i++){
+                result[i] = result[i].toObject();
+                result[i].caseList = await this.caseModel.list(result[i]._id)
+            }
             ctx.body = yapi.commons.resReturn(result);
         } catch (e) {
             ctx.body = yapi.commons.resReturn(null, 402, e.message);
@@ -134,13 +139,7 @@ class interfaceColController extends baseController{
                 return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');                
             }
             if (!params.col_id) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空');                
-            }
-            if (!params.env) {
-                return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置');                
-            }
-            if (!params.path) {
-                return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空');                
+                return ctx.body = yapi.commons.resReturn(null, 400, '接口集id不能为空');                
             }
           
    
diff --git a/server/models/interface.js b/server/models/interface.js
index 441e7125..2be3710a 100644
--- a/server/models/interface.js
+++ b/server/models/interface.js
@@ -42,26 +42,12 @@ class interfaceModel extends baseModel {
                     default: "1"
                 }
             }],
-            req_body_json_doc: [{
-                json_path: String, desc: String,required:{
-                    type:String,
-                    enum: ["1", "0"],
-                    default: "1"
-                }
-            }],
             req_body_other: String,
             res_body_type: {
                 type: String,
                 enum: ['json', 'text', 'xml']
             },
-            res_body: String,
-            res_body_json_doc: [{
-                json_path: String, desc: String,required:{
-                    type:String,
-                    enum: ["1", "0"],
-                    default: "1"
-                }
-            }]
+            res_body: String
         };
     }
 
diff --git a/server/models/interfaceCase.js b/server/models/interfaceCase.js
index bb1524b7..481d9421 100644
--- a/server/models/interfaceCase.js
+++ b/server/models/interfaceCase.js
@@ -15,10 +15,10 @@ class interfaceCase extends baseModel {
             project_id: { type: Number, required: true },
             add_time: Number,
             up_time: Number,
-            env: { type: String, required: true },
+            env: { type: String },
             domain: {type: String },
-            path: { type: String, required: true },
-            method: { type: String, required: true },
+            path: { type: String },
+            method: { type: String },
             req_query: [{
                 name: String, value: String
             }],
@@ -48,8 +48,10 @@ class interfaceCase extends baseModel {
         }).exec();
     }
 
-    list() {
-        return this.model.find().select("casename uid col_id _id index").exec();
+    list(col_id) {
+        return this.model.find({
+            col_id: col_id
+        }).select("casename uid col_id _id index").exec();
     }
 
     del(id) {
diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js
index 712693a3..862f037c 100644
--- a/server_dist/controllers/interfaceCol.js
+++ b/server_dist/controllers/interfaceCol.js
@@ -75,7 +75,7 @@ var interfaceColController = function (_baseController) {
         key: 'list',
         value: function () {
             var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
-                var id, result;
+                var id, result, i;
                 return _regenerator2.default.wrap(function _callee$(_context) {
                     while (1) {
                         switch (_context.prev = _context.next) {
@@ -87,23 +87,43 @@ var interfaceColController = function (_baseController) {
 
                             case 4:
                                 result = _context.sent;
+                                i = 0;
 
-                                ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context.next = 11;
+                            case 6:
+                                if (!(i < result.length)) {
+                                    _context.next = 14;
+                                    break;
+                                }
+
+                                result[i] = result[i].toObject();
+                                _context.next = 10;
+                                return this.caseModel.list(result[i]._id);
+
+                            case 10:
+                                result[i].caseList = _context.sent;
+
+                            case 11:
+                                i++;
+                                _context.next = 6;
                                 break;
 
-                            case 8:
-                                _context.prev = 8;
+                            case 14:
+                                ctx.body = _yapi2.default.commons.resReturn(result);
+                                _context.next = 20;
+                                break;
+
+                            case 17:
+                                _context.prev = 17;
                                 _context.t0 = _context['catch'](0);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message);
 
-                            case 11:
+                            case 20:
                             case 'end':
                                 return _context.stop();
                         }
                     }
-                }, _callee, this, [[0, 8]]);
+                }, _callee, this, [[0, 17]]);
             }));
 
             function list(_x) {
@@ -309,62 +329,46 @@ var interfaceColController = function (_baseController) {
                                     break;
                                 }
 
-                                return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目id不能为空'));
+                                return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '接口集id不能为空'));
 
                             case 7:
-                                if (params.env) {
-                                    _context4.next = 9;
-                                    break;
-                                }
-
-                                return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '缺少环境配置'));
-
-                            case 9:
-                                if (params.path) {
-                                    _context4.next = 11;
-                                    break;
-                                }
-
-                                return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'path 不能为空'));
-
-                            case 11:
                                 if (params.casename) {
-                                    _context4.next = 13;
+                                    _context4.next = 9;
                                     break;
                                 }
 
                                 return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用例名称不能为空'));
 
-                            case 13:
+                            case 9:
 
                                 params.uid = this.getUid();
                                 params.index = 0;
                                 params.add_time = _yapi2.default.commons.time();
                                 params.up_time = _yapi2.default.commons.time();
-                                _context4.next = 19;
+                                _context4.next = 15;
                                 return this.caseModel.save(params);
 
-                            case 19:
+                            case 15:
                                 result = _context4.sent;
 
 
                                 ctx.body = _yapi2.default.commons.resReturn(result);
 
-                                _context4.next = 26;
+                                _context4.next = 22;
                                 break;
 
-                            case 23:
-                                _context4.prev = 23;
+                            case 19:
+                                _context4.prev = 19;
                                 _context4.t0 = _context4['catch'](0);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context4.t0.message);
 
-                            case 26:
+                            case 22:
                             case 'end':
                                 return _context4.stop();
                         }
                     }
-                }, _callee4, this, [[0, 23]]);
+                }, _callee4, this, [[0, 19]]);
             }));
 
             function addCase(_x4) {
diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js
index de19d3f0..fb1a8f13 100644
--- a/server_dist/models/interface.js
+++ b/server_dist/models/interface.js
@@ -81,26 +81,12 @@ var interfaceModel = function (_baseModel) {
                         default: "1"
                     }
                 }],
-                req_body_json_doc: [{
-                    json_path: String, desc: String, required: {
-                        type: String,
-                        enum: ["1", "0"],
-                        default: "1"
-                    }
-                }],
                 req_body_other: String,
                 res_body_type: {
                     type: String,
                     enum: ['json', 'text', 'xml']
                 },
-                res_body: String,
-                res_body_json_doc: [{
-                    json_path: String, desc: String, required: {
-                        type: String,
-                        enum: ["1", "0"],
-                        default: "1"
-                    }
-                }]
+                res_body: String
             };
         }
     }, {
diff --git a/server_dist/models/interfaceCase.js b/server_dist/models/interfaceCase.js
index 5b8f5ba4..02b0dda0 100644
--- a/server_dist/models/interfaceCase.js
+++ b/server_dist/models/interfaceCase.js
@@ -54,10 +54,10 @@ var interfaceCase = function (_baseModel) {
                 project_id: { type: Number, required: true },
                 add_time: Number,
                 up_time: Number,
-                env: { type: String, required: true },
+                env: { type: String },
                 domain: { type: String },
-                path: { type: String, required: true },
-                method: { type: String, required: true },
+                path: { type: String },
+                method: { type: String },
                 req_query: [{
                     name: String, value: String
                 }],
@@ -90,8 +90,10 @@ var interfaceCase = function (_baseModel) {
         }
     }, {
         key: 'list',
-        value: function list() {
-            return this.model.find().select("casename uid col_id _id index").exec();
+        value: function list(col_id) {
+            return this.model.find({
+                col_id: col_id
+            }).select("casename uid col_id _id index").exec();
         }
     }, {
         key: 'del',

From 04791fa39e362a9f035d02c505aaa233efe6ae58 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 20:09:47 +0800
Subject: [PATCH 09/14] fix: message login when guest open site

---
 client/reducer/middleware/messageMiddleware.js | 2 +-
 server/controllers/base.js                     | 2 +-
 server/router.js                               | 2 +-
 server_dist/controllers/base.js                | 2 +-
 server_dist/router.js                          | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/client/reducer/middleware/messageMiddleware.js b/client/reducer/middleware/messageMiddleware.js
index 8abb3d5d..5c16bde7 100644
--- a/client/reducer/middleware/messageMiddleware.js
+++ b/client/reducer/middleware/messageMiddleware.js
@@ -3,7 +3,7 @@ import { message } from 'antd';
 export default () => next => action => {
   if (action.error) {
     message.error((action.payload && action.payload.message) || '服务器错误');
-  } else if (action.payload && action.payload.data && action.payload.data.errcode) {
+  } else if (action.payload && action.payload.data && action.payload.data.errcode && action.payload.data.errcode !== 40011) {
     message.error(action.payload.data.errmsg);
   }
   return next(action);
diff --git a/server/controllers/base.js b/server/controllers/base.js
index f71c8dc8..781eed53 100644
--- a/server/controllers/base.js
+++ b/server/controllers/base.js
@@ -72,7 +72,7 @@ class baseController {
             result.server_ip = yapi.WEBCONFIG.server_ip;
             return ctx.body = yapi.commons.resReturn(result);
         }
-        return ctx.body = yapi.commons.resReturn(null, 300, 'Please login.');
+        return ctx.body = yapi.commons.resReturn(null, 40011, '请登录...');
     }
 
     getRole() {
diff --git a/server/router.js b/server/router.js
index 84a4115e..1dfd5b2c 100644
--- a/server/router.js
+++ b/server/router.js
@@ -320,7 +320,7 @@ function createAction(controller, action, path, method) {
         if (inst.$auth === true) {
             await inst[action].call(inst, ctx);
         } else {
-            ctx.body = yapi.commons.resReturn(null, 40011, '请登录.');
+            ctx.body = yapi.commons.resReturn(null, 40011, '请登录...');
         }
     });
 }
diff --git a/server_dist/controllers/base.js b/server_dist/controllers/base.js
index d5b02e1b..3cdad72b 100644
--- a/server_dist/controllers/base.js
+++ b/server_dist/controllers/base.js
@@ -193,7 +193,7 @@ var baseController = function () {
                                 return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result));
 
                             case 7:
-                                return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 300, 'Please login.'));
+                                return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录...'));
 
                             case 8:
                             case 'end':
diff --git a/server_dist/router.js b/server_dist/router.js
index 68b8c1ef..bc493ebf 100644
--- a/server_dist/router.js
+++ b/server_dist/router.js
@@ -339,7 +339,7 @@ function createAction(controller, action, path, method) {
 							break;
 
 						case 8:
-							ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录.');
+							ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录...');
 
 						case 9:
 						case 'end':

From 129708f264a08398589dc7316047841d943085f8 Mon Sep 17 00:00:00 2001
From: zwjamnsss <zwjamnsss@gmail.com>
Date: Mon, 14 Aug 2017 21:22:18 +0800
Subject: [PATCH 10/14] feat: run

---
 .../Project/Interface/InterfaceList/Run.js    | 41 ++++++++++---------
 client/reducer/modules/project.js             | 18 ++++----
 2 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/client/containers/Project/Interface/InterfaceList/Run.js b/client/containers/Project/Interface/InterfaceList/Run.js
index b71db814..8f375bf8 100644
--- a/client/containers/Project/Interface/InterfaceList/Run.js
+++ b/client/containers/Project/Interface/InterfaceList/Run.js
@@ -5,7 +5,7 @@ import { Button, Input, Select, Card, Alert, Spin, Icon, message } from 'antd'
 import { autobind } from 'core-decorators';
 import crossRequest from 'cross-request';
 import { withRouter } from 'react-router';
-import axios from 'axios';
+// import axios from 'axios';
 import URL from 'url';
 
 // import {
@@ -19,25 +19,27 @@ const Option = Select.Option;
 
 @connect(
   state => ({
-    reqParams: state.addInterface.reqParams,
-    method: state.addInterface.method,
-    url: state.addInterface.url,
-    seqGroup: state.addInterface.seqGroup,
-    interfaceName: state.addInterface.interfaceName,
-    interfaceProject: state.addInterface.project
+    currInterface: state.inter.curdata,
+    currProject: state.project.currProject
+    // reqParams: state.addInterface.reqParams,
+    // method: state.addInterface.method,
+    // url: state.addInterface.url,
+    // seqGroup: state.addInterface.seqGroup,
+    // interfaceName: state.addInterface.interfaceName,
   })
 )
 @withRouter
 export default class InterfaceTest extends Component {
 
   static propTypes = {
-    reqParams: PropTypes.string,
-    method: PropTypes.string,
-    url: PropTypes.string,
-    interfaceName: PropTypes.string,
-    seqGroup: PropTypes.array,
     match: PropTypes.object,
-    interfaceProject: PropTypes.object
+    currProject: PropTypes.object,
+    currInterface: PropTypes.object,
+    reqParams: PropTypes.string,
+    // method: PropTypes.string,
+    // url: PropTypes.string,
+    interfaceName: PropTypes.string
+    // seqGroup: PropTypes.array,
   }
 
   state = {
@@ -68,8 +70,11 @@ export default class InterfaceTest extends Component {
   @autobind
   getInterfaceState(nextProps) {
     const props = nextProps || this.props;
-    const { method, url, seqGroup, interfaceProject } = props;
-    const { prd_host, basepath, protocol, env } = interfaceProject;
+    const { currInterface, currProject } = props;
+    console.log('currInterface', currInterface)
+    console.log('currProject', currProject)
+    const { method, path: url, req_headers } = currInterface;
+    const { prd_host, basepath, protocol, env } = currProject;
     const pathname = (basepath + url).replace(/\/+/g, '/');
 
     const domains = {prd: protocol + '://' + prd_host};
@@ -104,7 +109,7 @@ export default class InterfaceTest extends Component {
 
     const headers = []
     let contentTypeIndex = -1;
-    seqGroup.forEach((headerItem, index) => {
+    req_headers.forEach((headerItem, index) => {
       if (headerItem.name) {
         // TODO 'Content-Type' 排除大小写不同格式影响
         if (headerItem.name === 'Content-Type'){
@@ -350,10 +355,6 @@ export default class InterfaceTest extends Component {
     const hasPlugin = this.hasCrossRequestPlugin();
     const search = decodeURIComponent(URL.format({query: this.getQueryObj(query)}));
 
-    console.log(axios)
-    window.axios = axios
-
-
     return (
       <div className="interface-test">
         <div style={{padding: '0 20%'}}>
diff --git a/client/reducer/modules/project.js b/client/reducer/modules/project.js
index 28395f6f..cc611f5c 100644
--- a/client/reducer/modules/project.js
+++ b/client/reducer/modules/project.js
@@ -8,7 +8,7 @@ const PROJECT_DEL = 'yapi/project/PROJECT_DEL';
 const CHANGE_UPDATE_MODAL = 'yapi/project/CHANGE_UPDATE_MODAL';
 const CHANGE_TABLE_LOADING = 'yapi/project/CHANGE_TABLE_LOADING';
 const PROJECT_UPDATE = 'yapi/project/PROJECT_UPDATE';
-const GET_CUR_PROJECT = 'yapi/project/GET_CUR_PROJECT'
+const GET_CURR_PROJECT = 'yapi/project/GET_CURR_PROJECT'
 
 // Reducer
 const initialState = {
@@ -19,15 +19,15 @@ const initialState = {
   tableLoading: true,
   total: 0,
   currPage: 1,
-  curProject: {}
+  currProject: {}
 };
 
 export default (state = initialState, action) => {
   switch (action.type) {
-    case GET_CUR_PROJECT: {
+    case GET_CURR_PROJECT: {
       return {
         ...state,
-        curProject: action.payload.data
+        currProject: action.payload.data
       }
     }
     case CHANGE_UPDATE_MODAL: {
@@ -132,12 +132,12 @@ export function delProject(id) {
 }
 
 export function getProject(id){
- 
-  return async (dispatch) => {    
+
+  return async (dispatch) => {
     let result = await axios.get('/api/project/get?id=' + id);
     dispatch({
-      type: GET_CUR_PROJECT,
-      payload: result.data 
+      type: GET_CURR_PROJECT,
+      payload: result.data
     })
   }
-}
\ No newline at end of file
+}

From be6abeedf88fd480a690900c9dc876249c885bb9 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 21:43:06 +0800
Subject: [PATCH 11/14] feat: edit interface ci

---
 .../Project/Interface/InterfaceList/Edit.js   |  12 +-
 .../Project/Interface/InterfaceList/Edit.scss |   6 +
 .../InterfaceList/InterfaceEditForm.js        | 122 ++++++++++++------
 .../Interface/InterfaceList/mockEditor.js     |   5 +-
 4 files changed, 95 insertions(+), 50 deletions(-)
 create mode 100644 client/containers/Project/Interface/InterfaceList/Edit.scss

diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js
index c677b8bf..dec8220d 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.js
+++ b/client/containers/Project/Interface/InterfaceList/Edit.js
@@ -2,7 +2,7 @@ import React,{Component} from 'react'
 import PropTypes from 'prop-types'
 import { connect } from 'react-redux';
 import InterfaceEditForm from './InterfaceEditForm.js'
-
+import './Edit.scss'
 
 @connect(
   state => {
@@ -17,11 +17,13 @@ class InterfaceEdit extends Component{
     curdata: PropTypes.object
   }
 
+  onSubmit = (params)=>{
+    console.log('edit', params)
+  }
+
   render(){
-    
-    return <div>
-      <h3>Edit</h3>
-      <InterfaceEditForm />
+    return <div className="interface-edit">
+      <InterfaceEditForm onSubmit={this.onSubmit} curdata={this.props.curdata} />
     </div>
   }
 }
diff --git a/client/containers/Project/Interface/InterfaceList/Edit.scss b/client/containers/Project/Interface/InterfaceList/Edit.scss
new file mode 100644
index 00000000..ddb4a96f
--- /dev/null
+++ b/client/containers/Project/Interface/InterfaceList/Edit.scss
@@ -0,0 +1,6 @@
+.interface-edit{
+  padding:10px;
+  .interface-edit-item{
+    margin-bottom: 10px;
+  }
+}
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
index 2219bddf..f7c875d3 100644
--- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
@@ -18,40 +18,52 @@ const mockEditor = require('./mockEditor.js');
 
 class InterfaceEditForm extends Component {
   static propTypes = {
-    form: PropTypes.object
+    form: PropTypes.object,
+    curdata: PropTypes.object,
+    onSubmit: PropTypes.func
   }
 
   constructor(props) {
     super(props)
-    this.state = {
-      title: 'title',
-      path: 'path',
+    const { curdata } = this.props;
+    if (curdata.query && curdata.query.length === 0) delete curdata.query;
+    if (curdata.req_headers && curdata.req_headers.length === 0) delete curdata.req_headers;
+    if (curdata.req_body_form && curdata.req_body_form.length === 0) delete curdata.req_body_form;
+
+    this.state = Object.assign({
+      title: '',
+      path: '',
+      status: 'undone',
       method: 'get',
       query: [{
-        name: 'name',
-        desc: 'desc',
+        name: '',
+        desc: '',
         required: "1"
       }],
       req_body_type: 'form',
       req_headers: [{
-        name: 'Content-Type',
-        value: 'application/x-www-form-urlencoded', required: "1"
+        name: '',
+        value: '', required: "1"
       }],
       req_body_form: [{
-        name: 'id',
-        type: 'text',
-        required: '1'
+        name: '',
+        type: '',
+        required: ''
       }],
       res_body_type: 'json',
-      res_body: ''
-    }
+      res_body: '',
+      desc: '',
+      res_body_mock: ''
+    }, curdata)
   }
 
   handleSubmit = (e) => {
     e.preventDefault();
     this.props.form.validateFields((err, values) => {
       if (!err) {
-        console.log('Received values of form: ', values);
+        if (values.res_body_type === 'json') values.res_body = this.state.res_body;
+        values.req_body_json = this.state.res_body;
+        this.props.onSubmit(values)
       }
     });
   }
@@ -72,8 +84,10 @@ class InterfaceEditForm extends Component {
       container: 'res_body_json',
       data: that.state.res_body,
       onChange: function (d) {
+        
         that.setState({
-          res_body: d.text
+          res_body: d.text,
+          res_body_mock: d.mockText
         })
       }
     })
@@ -99,8 +113,8 @@ class InterfaceEditForm extends Component {
   render() {
     const { getFieldDecorator } = this.props.form;
     const formItemLayout = {
-      labelCol: { span: 6 },
-      wrapperCol: { span: 14 }
+      labelCol: { span: 4 },
+      wrapperCol: { span: 18 }
     };
     const prefixSelector = getFieldDecorator('method', {
       initialValue: 'GET'
@@ -219,10 +233,12 @@ class InterfaceEditForm extends Component {
     return (
       <Form onSubmit={this.handleSubmit}>
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="接口名称"
         >
           {getFieldDecorator('title', {
+            initialValue: this.state.title,
             rules: [{
               required: true, message: '清输入接口名称!'
             }]
@@ -232,10 +248,12 @@ class InterfaceEditForm extends Component {
         </FormItem>
 
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="接口路径"
         >
           {getFieldDecorator('path', {
+            initialValue: this.state.path,
             rules: [{
               required: true, message: '清输入接口路径!'
             }]
@@ -245,10 +263,11 @@ class InterfaceEditForm extends Component {
         </FormItem>
 
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="状态"
         >
-          {getFieldDecorator('status', { initialValue: 'undone' })(
+          {getFieldDecorator('status', { initialValue: this.state.status })(
             <Select>
               <Option value="done">已完成</Option>
               <Option value="undone">未完成</Option>
@@ -257,23 +276,25 @@ class InterfaceEditForm extends Component {
         </FormItem>
 
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="接口描述"
         >
-          {getFieldDecorator('desc')(
+          {getFieldDecorator('desc', { initialValue: this.state.desc })(
             <Input.TextArea placeholder="接口描述" />
           )}
         </FormItem>
 
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="Query"
         >
-          <Button onClick={() => this.addParams('query')}>添加Query参数</Button>
+          <Button size="small" type="primary" onClick={() => this.addParams('query')}>添加Query参数</Button>
         </FormItem>
 
-        <Row>
-          <Col span={18} offset={6}>
+        <Row className="interface-edit-item">
+          <Col span={18} offset={4}>
             {QueryList}
           </Col>
 
@@ -281,20 +302,22 @@ class InterfaceEditForm extends Component {
 
 
         <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="请求Headers"
         >
-          <Button onClick={() => this.addParams('req_headers')}>添加Header</Button>
+          <Button size="small" type="primary" onClick={() => this.addParams('req_headers')}>添加Header</Button>
         </FormItem>
 
-        <Row>
-          <Col span={18} offset={6}>
+        <Row className="interface-edit-item">
+          <Col span={18} offset={4}>
             {headerList}
           </Col>
 
         </Row>
 
-        <FormItem style={{ marginBottom: "5px" }}
+        <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="请求Body"
         >
@@ -311,12 +334,12 @@ class InterfaceEditForm extends Component {
 
         </FormItem>
         {this.props.form.getFieldValue('req_body_type') === 'form' ?
-          <Row >
-            <Col span={14} offset={6} style={{ minHeight: "50px", padding: "15px" }}>
+          <Row className="interface-edit-item">
+            <Col span={18} offset={4} style={{ minHeight: "50px" }}>
               <Row>
-                <Col span="24">
+                <Col span="24" className="interface-edit-item">
 
-                  <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button>
+                  <Button size="small" type="primary" onClick={() => this.addParams('req_body_form')}>添加form参数</Button>
 
                 </Col>
 
@@ -330,14 +353,14 @@ class InterfaceEditForm extends Component {
         }
 
 
-        <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}>
-          <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}>
+        <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}>
+          <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px"}}>
           </Col>
         </Row>
 
         {this.props.form.getFieldValue('req_body_type') === 'file' ?
-          <Row >
-            <Col span={14} offset={6} style={{ padding: "15px" }}>
+          <Row className="interface-edit-item" >
+            <Col span={14} offset={6}>
               {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })(
                 <Input.TextArea placeholder="备注信息" />
               )}
@@ -350,7 +373,7 @@ class InterfaceEditForm extends Component {
         }
         {this.props.form.getFieldValue('req_body_type') === 'raw' ?
           <Row>
-            <Col span={14} offset={6} style={{ padding: "15px" }}>
+            <Col span={18} offset={4} >
               {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })(
                 <Input.TextArea placeholder="备注信息" />
               )}
@@ -359,7 +382,8 @@ class InterfaceEditForm extends Component {
           : null
         }
 
-        <FormItem style={{ marginBottom: "5px" }}
+        <FormItem
+          className="interface-edit-item"
           {...formItemLayout}
           label="响应Body"
         >
@@ -374,17 +398,28 @@ class InterfaceEditForm extends Component {
             )}
 
         </FormItem>
-        <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}>
-          <Col span={14} offset={6} id="res_body_json" style={{ minHeight: "300px", padding: "15px" }}>
+        <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}>
+          
+          <Col span={18} offset={4}  id="res_body_json" style={{ minHeight: "300px" }}>
 
           </Col>
-
-
         </Row>
 
-        <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}>
-          <Col span={14} offset={6} style={{ padding: "15px" }}>
-            {getFieldDecorator('req_body_other', { initialValue: this.state.res_body })(
+        <FormItem
+          style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}
+          className="interface-edit-item"
+          {...formItemLayout}
+          label="mock预览"
+        >
+          <pre style={{backgroundColor: "#eee", lineHeight: "20px"}}>
+            {this.state.res_body_mock || " "}
+          </pre>
+        </FormItem>
+       
+
+        <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}>
+          <Col span={18} offset={4} >
+            {getFieldDecorator('res_body', { initialValue: this.state.res_body })(
               <Input.TextArea placeholder="备注信息" />
             )}
           </Col>
@@ -394,6 +429,7 @@ class InterfaceEditForm extends Component {
 
 
         <FormItem
+          className="interface-edit-item"
           wrapperCol={{ span: 12, offset: 6 }}
         >
           <Button type="primary" htmlType="submit">Submit</Button>
diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js
index f7c01589..3b3763a3 100644
--- a/client/containers/Project/Interface/InterfaceList/mockEditor.js
+++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js
@@ -76,7 +76,7 @@ function run(options) {
     enableBasicAutocompletion: true,
     enableSnippets: false,
     enableLiveAutocompletion: true,
-    useWorker: false
+    useWorker: true
   });
   mockEditor = {
     curData: {},
@@ -86,7 +86,7 @@ function run(options) {
       if (typeof data === 'string') {
         editor.setValue(data);
       } else if (typeof data === 'object') {
-        editor.setValue(json5.stringify(data, null, "  "))
+        editor.setValue(JSON.stringify(data, null, "  "))
       }
     },
     editor: editor
@@ -128,6 +128,7 @@ function handleJson(json) {
     curData.format = true;
     curData.jsonData = obj;
     curData.mockData = Mock.mock(obj);
+    curData.mockText = JSON.stringify(curData.mockData, null, "  ");
   } catch (e) {
     curData.format = e.message;
   }

From f504acdec848874358a645e7544d8906706b219e Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Mon, 14 Aug 2017 23:01:20 +0800
Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84edit=20interfac?=
 =?UTF-8?q?e=20=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Project/Interface/InterfaceList/Edit.js   | 21 ++++++++--
 .../InterfaceList/InterfaceEditForm.js        | 28 +++++++------
 client/reducer/modules/interface.js           | 23 +++++++++--
 server/controllers/interface.js               |  9 ++++-
 server/models/interface.js                    |  2 +-
 server_dist/controllers/interface.js          | 39 +++++++++++--------
 server_dist/models/interface.js               |  2 +-
 7 files changed, 87 insertions(+), 37 deletions(-)

diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js
index dec8220d..73a4c813 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.js
+++ b/client/containers/Project/Interface/InterfaceList/Edit.js
@@ -2,6 +2,9 @@ import React,{Component} from 'react'
 import PropTypes from 'prop-types'
 import { connect } from 'react-redux';
 import InterfaceEditForm from './InterfaceEditForm.js'
+import { updateInterfaceData } from '../../../../reducer/modules/interface.js';
+import axios from 'axios'
+import {message} from 'antd'
 import './Edit.scss'
 
 @connect(
@@ -9,16 +12,28 @@ import './Edit.scss'
     return {
       curdata: state.inter.curdata
     }
+  },{
+    updateInterfaceData
   }
 )
 
 class InterfaceEdit extends Component{
   static propTypes = {
-    curdata: PropTypes.object
+    curdata: PropTypes.object,
+    updateInterfaceData: PropTypes.func
   }
 
-  onSubmit = (params)=>{
-    console.log('edit', params)
+  onSubmit =async (params)=>{
+    params.id = params._id = this.props.curdata._id;
+    let result =await  axios.post('/api/interface/up', params);
+    if(result.data.errcode === 0){
+      this.props.updateInterfaceData(params);
+      message.success('保存成功');
+    }else{
+      message.success(result.data.errmsg)
+    }
+    
+    
   }
 
   render(){
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
index f7c875d3..7d9db38d 100644
--- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
@@ -9,7 +9,7 @@ const FormItem = Form.Item;
 const Option = Select.Option;
 const RadioGroup = Radio.Group;
 const dataTpl = {
-  query: { name: "", required: "1", desc: "" },
+  req_query: { name: "", required: "1", desc: "" },
   req_headers: { name: "", required: "1", desc: "" }
 }
 
@@ -26,7 +26,7 @@ class InterfaceEditForm extends Component {
   constructor(props) {
     super(props)
     const { curdata } = this.props;
-    if (curdata.query && curdata.query.length === 0) delete curdata.query;
+    if (curdata.req_query && curdata.req_query.length === 0) delete curdata.req_query;
     if (curdata.req_headers && curdata.req_headers.length === 0) delete curdata.req_headers;
     if (curdata.req_body_form && curdata.req_body_form.length === 0) delete curdata.req_body_form;
 
@@ -35,7 +35,7 @@ class InterfaceEditForm extends Component {
       path: '',
       status: 'undone',
       method: 'get',
-      query: [{
+      req_query: [{
         name: '',
         desc: '',
         required: "1"
@@ -130,14 +130,14 @@ class InterfaceEditForm extends Component {
     const queryTpl = (data, index) => {
       return <Row key={index}>
         <Col span="4">
-          {getFieldDecorator('query[' + index + '].name', {
+          {getFieldDecorator('req_query[' + index + '].name', {
             initialValue: data.name
           })(
             <Input placeholder="参数名称" />
             )}
         </Col>
         <Col span="4" >
-          {getFieldDecorator('query[' + index + '].required', {
+          {getFieldDecorator('req_query[' + index + '].required', {
             initialValue: data.required
           })(
             <Select>
@@ -147,14 +147,14 @@ class InterfaceEditForm extends Component {
             )}
         </Col>
         <Col span="8" >
-          {getFieldDecorator('query[' + index + '].desc', {
+          {getFieldDecorator('req_query[' + index + '].desc', {
             initialValue: data.desc
           })(
             <Input placeholder="备注" />
             )}
         </Col>
         <Col span="2" >
-          <Icon type="delete" onClick={() => this.delParams(index, 'query')} />
+          <Icon type="delete" onClick={() => this.delParams(index, 'req_query')} />
         </Col>
 
       </Row>
@@ -193,13 +193,15 @@ class InterfaceEditForm extends Component {
     const requestBodyTpl = (data, index) => {
       return <Row key={index}>
         <Col span="8">
-          {getFieldDecorator('req_body_form[' + index + '].name')(
+          {getFieldDecorator('req_body_form[' + index + '].name',{
+            initialValue: data.name
+          })(
             <Input placeholder="name" />
           )}
         </Col>
         <Col span="4" >
           {getFieldDecorator('req_body_form[' + index + '].type', {
-            initialValue: 'text'
+            initialValue: data.type
           })(
             <Select>
               <Option value="text">文本</Option>
@@ -208,7 +210,9 @@ class InterfaceEditForm extends Component {
             )}
         </Col>
         <Col span="8">
-          {getFieldDecorator('req_body_form[' + index + '].desc')(
+          {getFieldDecorator('req_body_form[' + index + '].desc',{
+            initialValue: data.desc
+          })(
             <Input placeholder="备注" />
           )}
         </Col>
@@ -218,7 +222,7 @@ class InterfaceEditForm extends Component {
       </Row>
     }
 
-    const QueryList = this.state.query.map((item, index) => {
+    const QueryList = this.state.req_query.map((item, index) => {
       return queryTpl(item, index)
     })
 
@@ -290,7 +294,7 @@ class InterfaceEditForm extends Component {
           {...formItemLayout}
           label="Query"
         >
-          <Button size="small" type="primary" onClick={() => this.addParams('query')}>添加Query参数</Button>
+          <Button size="small" type="primary" onClick={() => this.addParams('req_query')}>添加Query参数</Button>
         </FormItem>
 
         <Row className="interface-edit-item">
diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js
index 4dd3c3d7..2f10391b 100644
--- a/client/reducer/modules/interface.js
+++ b/client/reducer/modules/interface.js
@@ -5,6 +5,7 @@ const FETCH_INTERFACE_LIST = 'yapi/interface/FETCH_INTERFACE_LIST';
 const CHANGE_INTERFACE_ID = 'yapi/interface/CHANGE_INTERFACE_ID';
 const ADD_INTERFACE_DATA = 'yapi/interface/ADD_INTERFACE_DATA';
 const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA';
+const UPDATE_INTERFACE_DATA = 'yapi/interface/UPDATE_INTERFACE_DATA';
 // const SAVE_INTERFACE_PROJECT_ID = 'yapi/interface/SAVE_INTERFACE_PROJECT_ID';
 // const GET_INTERFACE_GROUP_LIST = 'yapi/interface/GET_INTERFACE_GROUP_LIST';
 
@@ -17,11 +18,16 @@ const initialState = {
 
 export default (state = initialState, action) => {
   switch (action.type) {
+    case UPDATE_INTERFACE_DATA:
+      return {
+        ...state,
+        curdata: action.updata
+      }
     case DELETE_INTERFACE_DATA:
       return (() => {
-        
-        let newlist = state.list.filter(data=> data._id !== action.payload), newid, curdata;
-        
+
+        let newlist = state.list.filter(data => data._id !== action.payload), newid, curdata;
+
         if (state.interfaceId === action.payload && state.list.length > 0) {
           newid = state.list[0]._id
           curdata = state.list[0]
@@ -72,6 +78,17 @@ export function changeInterfaceId(id) {
   }
 }
 
+export function updateInterfaceData(updata) {
+
+  return {
+    type: UPDATE_INTERFACE_DATA,
+    updata: updata,
+    payload: true
+  }
+
+
+}
+
 export async function deleteInterfaceData(id) {
   await axios.post('/api/interface/del', { id: id })
   return {
diff --git a/server/controllers/interface.js b/server/controllers/interface.js
index f70a1066..9873723f 100644
--- a/server/controllers/interface.js
+++ b/server/controllers/interface.js
@@ -83,6 +83,10 @@ class interfaceController extends baseController {
                 up_time: yapi.commons.time()
             };
 
+            if(params.req_query){
+                data.req_query = params.req_query;
+            }
+
             if (params.req_body_form) {
                 data.req_body_form = params.req_body_form;
             }
@@ -224,10 +228,13 @@ class interfaceController extends baseController {
         if (params.req_headers) {
             data.req_headers = params.req_headers;
         }
-
+        
         if (params.req_body_form) {
             data.req_body_form = params.req_body_form;
         }
+        if(params.req_query){
+            data.req_query = params.req_query;
+        }
         if (params.req_body_other) {
             data.req_body_other = params.req_body_other;
         }
diff --git a/server/models/interface.js b/server/models/interface.js
index 2be3710a..c34b2fce 100644
--- a/server/models/interface.js
+++ b/server/models/interface.js
@@ -36,7 +36,7 @@ class interfaceModel extends baseModel {
                 enum: ['form', 'json', 'text', 'file']
             },
             req_body_form: [{
-                name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
+                name: String,  type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
                     type:String,
                     enum: ["1", "0"],
                     default: "1"
diff --git a/server_dist/controllers/interface.js b/server_dist/controllers/interface.js
index 98c826cb..4f828b98 100644
--- a/server_dist/controllers/interface.js
+++ b/server_dist/controllers/interface.js
@@ -161,6 +161,10 @@ var interfaceController = function (_baseController) {
                                 };
 
 
+                                if (params.req_query) {
+                                    data.req_query = params.req_query;
+                                }
+
                                 if (params.req_body_form) {
                                     data.req_body_form = params.req_body_form;
                                 }
@@ -168,28 +172,28 @@ var interfaceController = function (_baseController) {
                                     data.req_body_other = params.req_body_other;
                                 }
 
-                                _context.next = 22;
+                                _context.next = 23;
                                 return this.Model.save(data);
 
-                            case 22:
+                            case 23:
                                 result = _context.sent;
 
                                 ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context.next = 29;
+                                _context.next = 30;
                                 break;
 
-                            case 26:
-                                _context.prev = 26;
+                            case 27:
+                                _context.prev = 27;
                                 _context.t0 = _context['catch'](16);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message);
 
-                            case 29:
+                            case 30:
                             case 'end':
                                 return _context.stop();
                         }
                     }
-                }, _callee, this, [[16, 26]]);
+                }, _callee, this, [[16, 27]]);
             }));
 
             function add(_x) {
@@ -439,6 +443,9 @@ var interfaceController = function (_baseController) {
                                 if (params.req_body_form) {
                                     data.req_body_form = params.req_body_form;
                                 }
+                                if (params.req_query) {
+                                    data.req_query = params.req_query;
+                                }
                                 if (params.req_body_other) {
                                     data.req_body_other = params.req_body_other;
                                 }
@@ -450,29 +457,29 @@ var interfaceController = function (_baseController) {
                                     data.res_body = params.res_body;
                                 }
 
-                                _context4.prev = 28;
-                                _context4.next = 31;
+                                _context4.prev = 29;
+                                _context4.next = 32;
                                 return this.Model.up(id, data);
 
-                            case 31:
+                            case 32:
                                 result = _context4.sent;
 
                                 ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context4.next = 38;
+                                _context4.next = 39;
                                 break;
 
-                            case 35:
-                                _context4.prev = 35;
-                                _context4.t0 = _context4['catch'](28);
+                            case 36:
+                                _context4.prev = 36;
+                                _context4.t0 = _context4['catch'](29);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context4.t0.message);
 
-                            case 38:
+                            case 39:
                             case 'end':
                                 return _context4.stop();
                         }
                     }
-                }, _callee4, this, [[28, 35]]);
+                }, _callee4, this, [[29, 36]]);
             }));
 
             function up(_x4) {
diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js
index fb1a8f13..f79e30f1 100644
--- a/server_dist/models/interface.js
+++ b/server_dist/models/interface.js
@@ -75,7 +75,7 @@ var interfaceModel = function (_baseModel) {
                     enum: ['form', 'json', 'text', 'file']
                 },
                 req_body_form: [{
-                    name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
+                    name: String, type: { type: String, enum: ['text', 'file'] }, desc: String, required: {
                         type: String,
                         enum: ["1", "0"],
                         default: "1"

From c00b55af531079c3b034e6a748763f46959c02f7 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Tue, 15 Aug 2017 11:12:39 +0800
Subject: [PATCH 13/14] feat: del prd_host and perfect the interface edit style

---
 client/containers/AddProject/AddProject.js    |  29 +---
 .../Project/Interface/InterfaceList/Edit.js   |  18 ++-
 .../Project/Interface/InterfaceList/Edit.scss |   5 +
 .../InterfaceList/InterfaceEditForm.js        |  84 +++++++----
 client/containers/Project/Project.js          |   2 +-
 client/reducer/modules/interface.js           |   3 +-
 client/reducer/modules/user.js                |   7 +-
 server/controllers/project.js                 |  46 +-----
 server/models/project.js                      |   4 +-
 server_dist/controllers/project.js            | 134 ++++--------------
 server_dist/models/project.js                 |   4 +-
 11 files changed, 115 insertions(+), 221 deletions(-)

diff --git a/client/containers/AddProject/AddProject.js b/client/containers/AddProject/AddProject.js
index 672111e6..9e57e8fb 100644
--- a/client/containers/AddProject/AddProject.js
+++ b/client/containers/AddProject/AddProject.js
@@ -58,7 +58,6 @@ class ProjectList extends Component {
     const { form, addProject } = this.props;
     e.preventDefault();
     form.validateFields((err, values) => {
-      console.log(values);
       if (!err) {
         values.protocol = this.state.protocol.split(':')[0];
 
@@ -110,6 +109,7 @@ class ProjectList extends Component {
             label="所属分组"
           >
             {getFieldDecorator('group_id', {
+              initialValue: this.state.groupList.length > 0? this.state.groupList[0]._id.toString() : null ,
               rules: [{
                 required: true, message: '请选择项目所属的分组!'
               }]
@@ -122,37 +122,12 @@ class ProjectList extends Component {
 
           <hr className="breakline" />
 
-          <FormItem
-            {...formItemLayout}
-            label={(
-              <span>
-                线上域名&nbsp;
-                <Tooltip title="将根据配置的线上域名访问mock数据">
-                  <Icon type="question-circle-o" />
-                </Tooltip>
-              </span>
-            )}
-          >
-            {getFieldDecorator('prd_host', {
-              rules: [{
-                required: true,
-                message: '请输入项目线上域名!'
-              }]
-            })(
-              <Input addonBefore={(
-                <Select defaultValue="http://" onChange={this.protocolChange}>
-                  <Option value="http://">{'http:\/\/'}</Option>
-                  <Option value="https://">{'https:\/\/'}</Option>
-                </Select>)} />
-            )}
-          </FormItem>
-
           <FormItem
             {...formItemLayout}
             label={(
               <span>
                 基本路径&nbsp;
-                <Tooltip title="基本路径为空是根路径">
+                <Tooltip title="接口基本路径,为空是根路径">
                   <Icon type="question-circle-o" />
                 </Tooltip>
               </span>
diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js
index 73a4c813..55ec4acd 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.js
+++ b/client/containers/Project/Interface/InterfaceList/Edit.js
@@ -10,7 +10,8 @@ import './Edit.scss'
 @connect(
   state => {
     return {
-      curdata: state.inter.curdata
+      curdata: state.inter.curdata,
+      currProject: state.project.currProject
     }
   },{
     updateInterfaceData
@@ -20,9 +21,18 @@ import './Edit.scss'
 class InterfaceEdit extends Component{
   static propTypes = {
     curdata: PropTypes.object,
+    currProject:PropTypes.object,
     updateInterfaceData: PropTypes.func
   }
 
+  constructor(props){
+    super(props)
+    const {curdata, currProject} = this.props;
+    this.state = {
+      mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}/${curdata.path}`
+    }
+  }
+
   onSubmit =async (params)=>{
     params.id = params._id = this.props.curdata._id;
     let result =await  axios.post('/api/interface/up', params);
@@ -31,14 +41,12 @@ class InterfaceEdit extends Component{
       message.success('保存成功');
     }else{
       message.success(result.data.errmsg)
-    }
-    
-    
+    }    
   }
 
   render(){
     return <div className="interface-edit">
-      <InterfaceEditForm onSubmit={this.onSubmit} curdata={this.props.curdata} />
+      <InterfaceEditForm mockUrl={this.state.mockUrl} basepath={this.props.currProject.basepath} onSubmit={this.onSubmit} curdata={this.props.curdata} />
     </div>
   }
 }
diff --git a/client/containers/Project/Interface/InterfaceList/Edit.scss b/client/containers/Project/Interface/InterfaceList/Edit.scss
index ddb4a96f..2600df00 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.scss
+++ b/client/containers/Project/Interface/InterfaceList/Edit.scss
@@ -3,4 +3,9 @@
   .interface-edit-item{
     margin-bottom: 10px;
   }
+  .interface-edit-del-icon{
+    margin-top: 4px;
+    margin-left: 5px;
+    cursor: pointer
+  }
 }
\ No newline at end of file
diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
index 7d9db38d..7bc71fc2 100644
--- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
+++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js
@@ -7,6 +7,7 @@ import {
 } from 'antd';
 const FormItem = Form.Item;
 const Option = Select.Option;
+const InputGroup = Input.Group;
 const RadioGroup = Radio.Group;
 const dataTpl = {
   req_query: { name: "", required: "1", desc: "" },
@@ -20,7 +21,9 @@ class InterfaceEditForm extends Component {
   static propTypes = {
     form: PropTypes.object,
     curdata: PropTypes.object,
-    onSubmit: PropTypes.func
+    mockUrl: PropTypes.string,
+    onSubmit: PropTypes.func,
+    basepath: PropTypes.string
   }
 
   constructor(props) {
@@ -53,7 +56,8 @@ class InterfaceEditForm extends Component {
       res_body_type: 'json',
       res_body: '',
       desc: '',
-      res_body_mock: ''
+      res_body_mock: '',
+      mockUrl: this.props.mockUrl
     }, curdata)
   }
 
@@ -80,17 +84,23 @@ class InterfaceEditForm extends Component {
       }
     })
 
-    mockEditor({
+    let resBodyEditor = mockEditor({
       container: 'res_body_json',
       data: that.state.res_body,
       onChange: function (d) {
-        
+
         that.setState({
           res_body: d.text,
           res_body_mock: d.mockText
         })
       }
     })
+
+    that.setState({
+      res_body_mock: resBodyEditor.curData.mockText
+    })
+
+
   }
 
   addParams = (name) => {
@@ -116,16 +126,7 @@ class InterfaceEditForm extends Component {
       labelCol: { span: 4 },
       wrapperCol: { span: 18 }
     };
-    const prefixSelector = getFieldDecorator('method', {
-      initialValue: 'GET'
-    })(
-      <Select style={{ width: 75 }}>
-        <Option value="GET">GET</Option>
-        <Option value="POST">POST</Option>
-        <Option value="PUT">PUT</Option>
-        <Option value="DELETE">DELETE</Option>
-      </Select>
-      );
+
 
     const queryTpl = (data, index) => {
       return <Row key={index}>
@@ -154,7 +155,7 @@ class InterfaceEditForm extends Component {
             )}
         </Col>
         <Col span="2" >
-          <Icon type="delete" onClick={() => this.delParams(index, 'req_query')} />
+          <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_query')} />
         </Col>
 
       </Row>
@@ -184,7 +185,7 @@ class InterfaceEditForm extends Component {
             )}
         </Col>
         <Col span="2" >
-          <Icon type="delete" onClick={() => this.delParams(index, 'req_headers')} />
+          <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_headers')} />
         </Col>
 
       </Row>
@@ -193,11 +194,11 @@ class InterfaceEditForm extends Component {
     const requestBodyTpl = (data, index) => {
       return <Row key={index}>
         <Col span="8">
-          {getFieldDecorator('req_body_form[' + index + '].name',{
+          {getFieldDecorator('req_body_form[' + index + '].name', {
             initialValue: data.name
           })(
             <Input placeholder="name" />
-          )}
+            )}
         </Col>
         <Col span="4" >
           {getFieldDecorator('req_body_form[' + index + '].type', {
@@ -210,14 +211,14 @@ class InterfaceEditForm extends Component {
             )}
         </Col>
         <Col span="8">
-          {getFieldDecorator('req_body_form[' + index + '].desc',{
+          {getFieldDecorator('req_body_form[' + index + '].desc', {
             initialValue: data.desc
           })(
             <Input placeholder="备注" />
-          )}
+            )}
         </Col>
         <Col span="2" >
-          <Icon type="delete" onClick={() => this.delParams(index, 'req_body_form')} />
+          <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_body_form')} />
         </Col>
       </Row>
     }
@@ -262,7 +263,25 @@ class InterfaceEditForm extends Component {
               required: true, message: '清输入接口路径!'
             }]
           })(
-            <Input addonBefore={prefixSelector} placeholder="/path" />
+            <InputGroup compact>
+              {getFieldDecorator('method', {
+                initialValue: 'GET'
+              })(
+                <Select style={{ width: "75px" }}>
+                  <Option value="GET">GET</Option>
+                  <Option value="POST">POST</Option>
+                  <Option value="PUT">PUT</Option>
+                  <Option value="DELETE">DELETE</Option>
+                </Select>
+                )}
+              <Input value={this.props.basepath} readOnly onChange={() => { }} style={{ width: '100px', marginRight: "10px", marginLeft: "10px" }} />
+              {getFieldDecorator('path', {
+                initialValue: this.state.path
+              })(
+                <Input placeholder="/path" style={{ width: '350px' }} />
+                )}
+            </InputGroup>
+
             )}
         </FormItem>
 
@@ -358,7 +377,7 @@ class InterfaceEditForm extends Component {
 
 
         <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}>
-          <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px"}}>
+          <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px" }}>
           </Col>
         </Row>
 
@@ -403,8 +422,8 @@ class InterfaceEditForm extends Component {
 
         </FormItem>
         <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}>
-          
-          <Col span={18} offset={4}  id="res_body_json" style={{ minHeight: "300px" }}>
+
+          <Col span={18} offset={4} id="res_body_json" style={{ minHeight: "300px" }}>
 
           </Col>
         </Row>
@@ -413,13 +432,22 @@ class InterfaceEditForm extends Component {
           style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}
           className="interface-edit-item"
           {...formItemLayout}
-          label="mock预览"
+          label="mock地址"
         >
-          <pre style={{backgroundColor: "#eee", lineHeight: "20px"}}>
+          <Input onChange={() => { }} value={this.state.mockUrl} />
+        </FormItem>
+
+        <FormItem
+          style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}
+          className="interface-edit-item"
+          {...formItemLayout}
+          label="预览"
+        >
+          <pre style={{ backgroundColor: "#eee", lineHeight: "20px" }}>
             {this.state.res_body_mock || " "}
           </pre>
         </FormItem>
-       
+
 
         <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}>
           <Col span={18} offset={4} >
diff --git a/client/containers/Project/Project.js b/client/containers/Project/Project.js
index afd0962f..ab4137c7 100644
--- a/client/containers/Project/Project.js
+++ b/client/containers/Project/Project.js
@@ -12,7 +12,7 @@ import { Setting } from './Setting/Setting.js'
 @connect(
   state => {
     return {
-      curProject: state.project.curProject
+      curProject: state.project.currProject
     }
   },
   {
diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js
index 2f10391b..1aa3c799 100644
--- a/client/reducer/modules/interface.js
+++ b/client/reducer/modules/interface.js
@@ -64,7 +64,8 @@ export default (state = initialState, action) => {
     case FETCH_INTERFACE_LIST:
       return {
         ...state,
-        list: action.payload.data
+        list: action.payload.data,
+        curdata: action.payload.data.length > 0 ? action.payload.data[0] :  {}
       }
     default:
       return state
diff --git a/client/reducer/modules/user.js b/client/reducer/modules/user.js
index 35f01142..8a438c98 100644
--- a/client/reducer/modules/user.js
+++ b/client/reducer/modules/user.js
@@ -24,15 +24,13 @@ const initialState = {
 export default (state = initialState, action) => {
   switch (action.type) {
     case GET_LOGIN_STATE: {
-      console.log(action.payload.data);
       return {
         ...state,
         isLogin: (action.payload.data.errcode == 0),
         role: action.payload.data.data ? action.payload.data.data.role:null,
         loginState: (action.payload.data.errcode == 0)?MEMBER_STATUS:GUEST_STATUS,
         userName: action.payload.data.data ? action.payload.data.data.username : null,
-        uid: action.payload.data.data ? action.payload.data.data._id : null,
-        server_ip: action.payload.data.data ? action.payload.data.data.server_ip:null
+        uid: action.payload.data.data ? action.payload.data.data._id : null
       };
     }
     case LOGIN: {
@@ -42,8 +40,7 @@ export default (state = initialState, action) => {
           isLogin: true,
           loginState: MEMBER_STATUS,
           uid: action.payload.data.data.uid,
-          userName: action.payload.data.data.username,
-          server_ip: action.payload.data.data.server_ip
+          userName: action.payload.data.data.username
         };
       } else {
         return state;
diff --git a/server/controllers/project.js b/server/controllers/project.js
index 295e83dd..792f4c18 100644
--- a/server/controllers/project.js
+++ b/server/controllers/project.js
@@ -45,8 +45,6 @@ class projectController extends baseController {
      * @foldnumber 10
      * @param {String} name 项目名称,不能为空
      * @param {String} basepath 项目基本路径,不能为空
-     * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据
-     * @param {String} protocol 线上域名协议,不能为空
      * @param {Number} group_id 项目分组id,不能为空
      * @param {String} project_type private public
      * @param  {String} [desc] 项目描述
@@ -58,8 +56,6 @@ class projectController extends baseController {
         params = yapi.commons.handleParams(params, {
             name: 'string',
             basepath: 'string',
-            prd_host: 'string',
-            protocol: 'string',
             group_id: 'number',
             desc: 'string'
         });
@@ -82,35 +78,16 @@ class projectController extends baseController {
             return ctx.body = yapi.commons.resReturn(null, 401, '已存在的项目名');
         }
 
-
-        if (!params.prd_host) {
-            return ctx.body = yapi.commons.resReturn(null, 400, '项目domain不能为空');
-        }
-
         params.basepath = params.basepath || '';
 
         if ((params.basepath = this.handleBasepath(params.basepath)) === false) {
             return ctx.body = yapi.commons.resReturn(null, 401, 'basepath格式有误');
         }
 
-        if (!this.verifyDomain(params.prd_host)) {
-            return ctx.body = yapi.commons.resReturn(null, 401, '线上域名格式有误');
-        }
-
-        let checkRepeatDomain = await this.Model.checkDomainRepeat(params.prd_host, params.basepath);
-
-        if (checkRepeatDomain > 0) {
-            return ctx.body = yapi.commons.resReturn(null, 401, '已存在domain和basepath');
-        }
-
-
-
         let data = {
             name: params.name,
             desc: params.desc,
-            prd_host: params.prd_host,
             basepath: params.basepath,
-            protocol: params.protocol || 'http',
             members: [],
             project_type: params.project_type || 'private',
             uid: this.getUid(),
@@ -426,7 +403,6 @@ class projectController extends baseController {
      * @param {Number} id 项目id,不能为空
      * @param {String} name 项目名称,不能为空
      * @param {String} basepath 项目基本路径,不能为空
-     * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据
      * @param {String} [desc] 项目描述
      * @param {Array} [env] 项目环境配置
      * @param {String} [env[].name] 环境名称
@@ -443,8 +419,6 @@ class projectController extends baseController {
             params = yapi.commons.handleParams(params, {
                 name: 'string',
                 basepath: 'string',
-                prd_host: 'string',
-                protocol: 'string',
                 group_id: 'number',
                 desc: 'string'
             });
@@ -462,17 +436,9 @@ class projectController extends baseController {
                 return ctx.body = yapi.commons.resReturn(null, 401, 'basepath格式有误');
             }
 
-            if (!this.verifyDomain(params.prd_host)) {
-                return ctx.body = yapi.commons.resReturn(null, 401, '线上域名格式有误');
-            }
-
             if (projectData.name === params.name) {
                 delete params.name;
             }
-            if (projectData.basepath === params.basepath && projectData.prd_host === params.prd_host) {
-                delete params.basepath;
-                delete params.prd_host;
-            }
 
             if (params.name) {
                 let checkRepeat = await this.Model.checkNameRepeat(params.name);
@@ -481,24 +447,15 @@ class projectController extends baseController {
                 }
             }
 
-            if (params.basepath && params.prd_host) {
-                let checkRepeatDomain = await this.Model.checkDomainRepeat(params.prd_host, params.basepath);
-                if (checkRepeatDomain > 0) {
-                    return ctx.body = yapi.commons.resReturn(null, 401, '已存在domain和basepath');
-                }
-            }
-
             let data = {
                 up_time: yapi.commons.time()
             };
 
             if (params.name) data.name = params.name;
             if (params.desc) data.desc = params.desc;
-            if (params.prd_host ) {
-                data.prd_host = params.prd_host;
+            if (params.basepath ) {
                 data.basepath = params.basepath;
             }
-            if (params.protocol) data.protocol = params.protocol;
             if (params.env) data.env = params.env;
 
             let result = await this.Model.up(id, data);
@@ -550,7 +507,6 @@ class projectController extends baseController {
             'members',
             { key: 'group_id', alias: 'groupId' },
             { key: 'up_time', alias: 'upTime' },
-            { key: 'prd_host', alias: 'prdHost' },
             { key: 'add_time', alias: 'addTime' }
         ];
         let groupRules = [
diff --git a/server/models/project.js b/server/models/project.js
index 578589a3..5f68232d 100644
--- a/server/models/project.js
+++ b/server/models/project.js
@@ -17,8 +17,6 @@ class projectModel extends baseModel {
             members: [
                 {uid: Number, role: {type: String, enum:['owner', 'dev']},username: String, email: String}
             ],
-            protocol: { type: String, required: true },
-            prd_host: { type: String, required: true },
             env: [
                 { name: String, domain: String }
             ],
@@ -60,7 +58,7 @@ class projectModel extends baseModel {
     list(group_id, auth) {
         let params = {group_id: group_id}
         if(!auth) params.project_type = 'public';
-        return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec();
+        return this.model.find(params).select("_id uid name basepath desc group_id project_type env add_time up_time").sort({ _id: -1 }).exec();
     }
 
     listWithPaging(group_id, page, limit) {
diff --git a/server_dist/controllers/project.js b/server_dist/controllers/project.js
index eeb081f4..1306355d 100644
--- a/server_dist/controllers/project.js
+++ b/server_dist/controllers/project.js
@@ -116,8 +116,6 @@ var projectController = function (_baseController) {
          * @foldnumber 10
          * @param {String} name 项目名称,不能为空
          * @param {String} basepath 项目基本路径,不能为空
-         * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据
-         * @param {String} protocol 线上域名协议,不能为空
          * @param {Number} group_id 项目分组id,不能为空
          * @param {String} project_type private public
          * @param  {String} [desc] 项目描述
@@ -129,7 +127,7 @@ var projectController = function (_baseController) {
         key: 'add',
         value: function () {
             var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
-                var params, checkRepeat, checkRepeatDomain, data, result, username;
+                var params, checkRepeat, data, result, username;
                 return _regenerator2.default.wrap(function _callee$(_context) {
                     while (1) {
                         switch (_context.prev = _context.next) {
@@ -139,8 +137,6 @@ var projectController = function (_baseController) {
                                 params = _yapi2.default.commons.handleParams(params, {
                                     name: 'string',
                                     basepath: 'string',
-                                    prd_host: 'string',
-                                    protocol: 'string',
                                     group_id: 'number',
                                     desc: 'string'
                                 });
@@ -189,53 +185,21 @@ var projectController = function (_baseController) {
                                 return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在的项目名'));
 
                             case 16:
-                                if (params.prd_host) {
-                                    _context.next = 18;
-                                    break;
-                                }
-
-                                return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目domain不能为空'));
-
-                            case 18:
 
                                 params.basepath = params.basepath || '';
 
                                 if (!((params.basepath = this.handleBasepath(params.basepath)) === false)) {
-                                    _context.next = 21;
+                                    _context.next = 19;
                                     break;
                                 }
 
                                 return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, 'basepath格式有误'));
 
-                            case 21:
-                                if (this.verifyDomain(params.prd_host)) {
-                                    _context.next = 23;
-                                    break;
-                                }
-
-                                return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '线上域名格式有误'));
-
-                            case 23:
-                                _context.next = 25;
-                                return this.Model.checkDomainRepeat(params.prd_host, params.basepath);
-
-                            case 25:
-                                checkRepeatDomain = _context.sent;
-
-                                if (!(checkRepeatDomain > 0)) {
-                                    _context.next = 28;
-                                    break;
-                                }
-
-                                return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在domain和basepath'));
-
-                            case 28:
+                            case 19:
                                 data = {
                                     name: params.name,
                                     desc: params.desc,
-                                    prd_host: params.prd_host,
                                     basepath: params.basepath,
-                                    protocol: params.protocol || 'http',
                                     members: [],
                                     project_type: params.project_type || 'private',
                                     uid: this.getUid(),
@@ -243,14 +207,14 @@ var projectController = function (_baseController) {
                                     add_time: _yapi2.default.commons.time(),
                                     up_time: _yapi2.default.commons.time()
                                 };
-                                _context.prev = 29;
-                                _context.next = 32;
+                                _context.prev = 20;
+                                _context.next = 23;
                                 return this.Model.save(data);
 
-                            case 32:
+                            case 23:
                                 result = _context.sent;
                                 username = this.getUsername();
-                                _context.next = 36;
+                                _context.next = 27;
                                 return this.logModel.save({
                                     content: '\u7528\u6237' + username + '\u6DFB\u52A0\u4E86\u9879\u76EE' + params.name,
                                     type: 'project',
@@ -259,23 +223,23 @@ var projectController = function (_baseController) {
                                     typeid: params.group_id
                                 });
 
-                            case 36:
+                            case 27:
                                 ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context.next = 42;
+                                _context.next = 33;
                                 break;
 
-                            case 39:
-                                _context.prev = 39;
-                                _context.t1 = _context['catch'](29);
+                            case 30:
+                                _context.prev = 30;
+                                _context.t1 = _context['catch'](20);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t1.message);
 
-                            case 42:
+                            case 33:
                             case 'end':
                                 return _context.stop();
                         }
                     }
-                }, _callee, this, [[29, 39]]);
+                }, _callee, this, [[20, 30]]);
             }));
 
             function add(_x) {
@@ -1022,7 +986,6 @@ var projectController = function (_baseController) {
          * @param {Number} id 项目id,不能为空
          * @param {String} name 项目名称,不能为空
          * @param {String} basepath 项目基本路径,不能为空
-         * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据
          * @param {String} [desc] 项目描述
          * @param {Array} [env] 项目环境配置
          * @param {String} [env[].name] 环境名称
@@ -1035,7 +998,7 @@ var projectController = function (_baseController) {
         key: 'up',
         value: function () {
             var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) {
-                var _id2, params, projectData, checkRepeat, checkRepeatDomain, data, result, username;
+                var _id2, params, projectData, checkRepeat, data, result, username;
 
                 return _regenerator2.default.wrap(function _callee10$(_context10) {
                     while (1) {
@@ -1049,8 +1012,6 @@ var projectController = function (_baseController) {
                                 params = _yapi2.default.commons.handleParams(params, {
                                     name: 'string',
                                     basepath: 'string',
-                                    prd_host: 'string',
-                                    protocol: 'string',
                                     group_id: 'number',
                                     desc: 'string'
                                 });
@@ -1091,61 +1052,30 @@ var projectController = function (_baseController) {
                                 return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, 'basepath格式有误'));
 
                             case 17:
-                                if (this.verifyDomain(params.prd_host)) {
-                                    _context10.next = 19;
-                                    break;
-                                }
-
-                                return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '线上域名格式有误'));
-
-                            case 19:
 
                                 if (projectData.name === params.name) {
                                     delete params.name;
                                 }
-                                if (projectData.basepath === params.basepath && projectData.prd_host === params.prd_host) {
-                                    delete params.basepath;
-                                    delete params.prd_host;
-                                }
 
                                 if (!params.name) {
-                                    _context10.next = 27;
+                                    _context10.next = 24;
                                     break;
                                 }
 
-                                _context10.next = 24;
+                                _context10.next = 21;
                                 return this.Model.checkNameRepeat(params.name);
 
-                            case 24:
+                            case 21:
                                 checkRepeat = _context10.sent;
 
                                 if (!(checkRepeat > 0)) {
-                                    _context10.next = 27;
+                                    _context10.next = 24;
                                     break;
                                 }
 
                                 return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在的项目名'));
 
-                            case 27:
-                                if (!(params.basepath && params.prd_host)) {
-                                    _context10.next = 33;
-                                    break;
-                                }
-
-                                _context10.next = 30;
-                                return this.Model.checkDomainRepeat(params.prd_host, params.basepath);
-
-                            case 30:
-                                checkRepeatDomain = _context10.sent;
-
-                                if (!(checkRepeatDomain > 0)) {
-                                    _context10.next = 33;
-                                    break;
-                                }
-
-                                return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在domain和basepath'));
-
-                            case 33:
+                            case 24:
                                 data = {
                                     up_time: _yapi2.default.commons.time()
                                 };
@@ -1153,20 +1083,18 @@ var projectController = function (_baseController) {
 
                                 if (params.name) data.name = params.name;
                                 if (params.desc) data.desc = params.desc;
-                                if (params.prd_host) {
-                                    data.prd_host = params.prd_host;
+                                if (params.basepath) {
                                     data.basepath = params.basepath;
                                 }
-                                if (params.protocol) data.protocol = params.protocol;
                                 if (params.env) data.env = params.env;
 
-                                _context10.next = 41;
+                                _context10.next = 31;
                                 return this.Model.up(_id2, data);
 
-                            case 41:
+                            case 31:
                                 result = _context10.sent;
                                 username = this.getUsername();
-                                _context10.next = 45;
+                                _context10.next = 35;
                                 return this.logModel.save({
                                     content: '\u7528\u6237' + username + '\u66F4\u65B0\u4E86\u9879\u76EE' + params.name,
                                     type: 'project',
@@ -1175,24 +1103,24 @@ var projectController = function (_baseController) {
                                     typeid: _id2
                                 });
 
-                            case 45:
+                            case 35:
 
                                 ctx.body = _yapi2.default.commons.resReturn(result);
-                                _context10.next = 51;
+                                _context10.next = 41;
                                 break;
 
-                            case 48:
-                                _context10.prev = 48;
+                            case 38:
+                                _context10.prev = 38;
                                 _context10.t1 = _context10['catch'](0);
 
                                 ctx.body = _yapi2.default.commons.resReturn(null, 402, _context10.t1.message);
 
-                            case 51:
+                            case 41:
                             case 'end':
                                 return _context10.stop();
                         }
                     }
-                }, _callee10, this, [[0, 48]]);
+                }, _callee10, this, [[0, 38]]);
             }));
 
             function up(_x11) {
@@ -1250,7 +1178,7 @@ var projectController = function (_baseController) {
 
                             case 10:
                                 groupList = _context11.sent;
-                                projectRules = ['_id', 'name', 'basepath', 'uid', 'env', 'members', { key: 'group_id', alias: 'groupId' }, { key: 'up_time', alias: 'upTime' }, { key: 'prd_host', alias: 'prdHost' }, { key: 'add_time', alias: 'addTime' }];
+                                projectRules = ['_id', 'name', 'basepath', 'uid', 'env', 'members', { key: 'group_id', alias: 'groupId' }, { key: 'up_time', alias: 'upTime' }, { key: 'add_time', alias: 'addTime' }];
                                 groupRules = ['_id', 'uid', { key: 'group_name', alias: 'groupName' }, { key: 'group_desc', alias: 'groupDesc' }, { key: 'add_time', alias: 'addTime' }, { key: 'up_time', alias: 'upTime' }];
 
 
diff --git a/server_dist/models/project.js b/server_dist/models/project.js
index d0f30aa0..a9ed7f21 100644
--- a/server_dist/models/project.js
+++ b/server_dist/models/project.js
@@ -54,8 +54,6 @@ var projectModel = function (_baseModel) {
                 group_id: { type: Number, required: true },
                 project_type: { type: String, required: true, enum: ['public', 'private'] },
                 members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'] }, username: String, email: String }],
-                protocol: { type: String, required: true },
-                prd_host: { type: String, required: true },
                 env: [{ name: String, domain: String }],
                 add_time: Number,
                 up_time: Number
@@ -101,7 +99,7 @@ var projectModel = function (_baseModel) {
         value: function list(group_id, auth) {
             var params = { group_id: group_id };
             if (!auth) params.project_type = 'public';
-            return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec();
+            return this.model.find(params).select("_id uid name basepath desc group_id project_type env add_time up_time").sort({ _id: -1 }).exec();
         }
     }, {
         key: 'listWithPaging',

From fe76f992f0b0251fce75b3fb564ace43565ab8b4 Mon Sep 17 00:00:00 2001
From: sean <wenxiong.su@qunar.com>
Date: Tue, 15 Aug 2017 12:05:22 +0800
Subject: [PATCH 14/14] fix: mongodb auth bug and perfect mockServer

---
 .../Project/Interface/InterfaceList/Edit.js   |   2 +-
 .../Interface/InterfaceList/mockEditor.js     |   2 +-
 server/middleware/mockServer.js               |  42 +++---
 server/utils/db.js                            |   3 +-
 server_dist/middleware/mockServer.js          | 132 +++++++++---------
 server_dist/utils/db.js                       |   2 +-
 6 files changed, 88 insertions(+), 95 deletions(-)

diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js
index 55ec4acd..698458d8 100644
--- a/client/containers/Project/Interface/InterfaceList/Edit.js
+++ b/client/containers/Project/Interface/InterfaceList/Edit.js
@@ -29,7 +29,7 @@ class InterfaceEdit extends Component{
     super(props)
     const {curdata, currProject} = this.props;
     this.state = {
-      mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}/${curdata.path}`
+      mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}${curdata.path}`
     }
   }
 
diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js
index 3b3763a3..1d4d4970 100644
--- a/client/containers/Project/Interface/InterfaceList/mockEditor.js
+++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js
@@ -86,7 +86,7 @@ function run(options) {
       if (typeof data === 'string') {
         editor.setValue(data);
       } else if (typeof data === 'object') {
-        editor.setValue(JSON.stringify(data, null, "  "))
+        editor.setValue(json5(data, null, "  "))
       }
     },
     editor: editor
diff --git a/server/middleware/mockServer.js b/server/middleware/mockServer.js
index af90c30e..635535b0 100644
--- a/server/middleware/mockServer.js
+++ b/server/middleware/mockServer.js
@@ -8,45 +8,39 @@ module.exports = async (ctx, next) => {
 
     let hostname = ctx.hostname;
     let config = yapi.WEBCONFIG;
+    let path = ctx.path;
+    
 
-    if (ctx.hostname === config.webhost) {
+    if (path.indexOf('/mock/') !== 0) {
         if (next) await next();
         return true;
     }
 
+    let paths = path.split("/");
+    let projectId = paths[2];
+    paths.splice(0, 3);
+    path = "/" + paths.join("/");
+    if(!projectId){
+        return ctx.body = yapi.commons.resReturn(null, 400, 'projectId不能为空');
+    }
+
     yapi.commons.log('MockServer Running...');
-    let projectInst = yapi.getInst(projectModel), projects;
+    let projectInst = yapi.getInst(projectModel), project;
     try {
-        projects = await projectInst.getByDomain(hostname);
+        project = await projectInst.get(projectId);
     } catch (e) {
         return ctx.body = yapi.commons.resReturn(null, 403, e.message);
     }
 
-    let matchProject = [], maxBasepath = 0;
-
-    for (let i = 0, l = projects.length; i < l; i++) {
-        let project = projects[i];
-        if(ctx.path && project.basepath == ""){
-            matchProject = project;
-        }
-        else if (ctx.path && ctx.path.indexOf(project.basepath) === 0) {
-            if (project.basepath.length > maxBasepath) {
-                maxBasepath = project.basepath.length;
-                matchProject = project;
-            }
-        }
+    if (project === false) {
+        return ctx.body = yapi.commons.resReturn(null, 400, '不存在的项目');
     }
-
-    if (matchProject === false) {
-        return ctx.body = yapi.commons.resReturn(null, 400, '不存在的domain');
-    }
-
-    let project = matchProject, interfaceData;
+    
+    let interfaceData;
     let interfaceInst = yapi.getInst(interfaceModel);
 
     try {
-
-        interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
+        interfaceData = await interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method);
         if (!interfaceData || interfaceData.length === 0) {
             //非正常跨域预检请求回应
             if(ctx.method === 'OPTIONS'){
diff --git a/server/utils/db.js b/server/utils/db.js
index a427a0cf..f60a3cbb 100644
--- a/server/utils/db.js
+++ b/server/utils/db.js
@@ -18,10 +18,11 @@ function connect() {
     let config = yapi.WEBCONFIG;
     let options = {};
 
-    if (config.user) {
+    if (config.db.user) {
         options.user = config.db.user;
         options.pass = config.db.pass;
     }
+    
 
     let db = mongoose.connect(`mongodb://${config.db.servername}:${config.db.port}/${config.db.DATABASE}`, options);
 
diff --git a/server_dist/middleware/mockServer.js b/server_dist/middleware/mockServer.js
index 2ee0428d..19ce4f24 100644
--- a/server_dist/middleware/mockServer.js
+++ b/server_dist/middleware/mockServer.js
@@ -12,9 +12,9 @@ var _yapi = require('../yapi.js');
 
 var _yapi2 = _interopRequireDefault(_yapi);
 
-var _project2 = require('../models/project.js');
+var _project = require('../models/project.js');
 
-var _project3 = _interopRequireDefault(_project2);
+var _project2 = _interopRequireDefault(_project);
 
 var _interface = require('../models/interface.js');
 
@@ -28,8 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
 
 module.exports = function () {
     var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) {
-        var hostname, config, projectInst, projects, matchProject, maxBasepath, i, l, _project, project, interfaceData, interfaceInst, res;
-
+        var hostname, config, path, paths, projectId, projectInst, project, interfaceData, interfaceInst, res;
         return _regenerator2.default.wrap(function _callee$(_context) {
             while (1) {
                 switch (_context.prev = _context.next) {
@@ -38,82 +37,81 @@ module.exports = function () {
 
                         hostname = ctx.hostname;
                         config = _yapi2.default.WEBCONFIG;
+                        path = ctx.path;
 
-                        if (!(ctx.hostname === config.webhost)) {
-                            _context.next = 8;
+                        if (!(path.indexOf('/mock/') !== 0)) {
+                            _context.next = 9;
                             break;
                         }
 
                         if (!next) {
-                            _context.next = 7;
+                            _context.next = 8;
                             break;
                         }
 
-                        _context.next = 7;
+                        _context.next = 8;
                         return next();
 
-                    case 7:
+                    case 8:
                         return _context.abrupt('return', true);
 
-                    case 8:
+                    case 9:
+                        paths = path.split("/");
+                        projectId = paths[2];
 
-                        _yapi2.default.commons.log('MockServer Running...');
-                        projectInst = _yapi2.default.getInst(_project3.default), projects = void 0;
-                        _context.prev = 10;
-                        _context.next = 13;
-                        return projectInst.getByDomain(hostname);
+                        paths.splice(0, 3);
+                        path = "/" + paths.join("/");
 
-                    case 13:
-                        projects = _context.sent;
-                        _context.next = 19;
-                        break;
-
-                    case 16:
-                        _context.prev = 16;
-                        _context.t0 = _context['catch'](10);
-                        return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message));
-
-                    case 19:
-                        matchProject = [], maxBasepath = 0;
-
-
-                        for (i = 0, l = projects.length; i < l; i++) {
-                            _project = projects[i];
-
-                            if (ctx.path && _project.basepath == "") {
-                                matchProject = _project;
-                            } else if (ctx.path && ctx.path.indexOf(_project.basepath) === 0) {
-                                if (_project.basepath.length > maxBasepath) {
-                                    maxBasepath = _project.basepath.length;
-                                    matchProject = _project;
-                                }
-                            }
-                        }
-
-                        if (!(matchProject === false)) {
-                            _context.next = 23;
+                        if (projectId) {
+                            _context.next = 15;
                             break;
                         }
 
-                        return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的domain'));
+                        return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'projectId不能为空'));
+
+                    case 15:
+
+                        _yapi2.default.commons.log('MockServer Running...');
+                        projectInst = _yapi2.default.getInst(_project2.default), project = void 0;
+                        _context.prev = 17;
+                        _context.next = 20;
+                        return projectInst.get(projectId);
+
+                    case 20:
+                        project = _context.sent;
+                        _context.next = 26;
+                        break;
 
                     case 23:
-                        project = matchProject, interfaceData = void 0;
-                        interfaceInst = _yapi2.default.getInst(_interface2.default);
-                        _context.prev = 25;
-                        _context.next = 28;
-                        return interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method);
+                        _context.prev = 23;
+                        _context.t0 = _context['catch'](17);
+                        return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message));
+
+                    case 26:
+                        if (!(project === false)) {
+                            _context.next = 28;
+                            break;
+                        }
+
+                        return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的项目'));
 
                     case 28:
+                        interfaceData = void 0;
+                        interfaceInst = _yapi2.default.getInst(_interface2.default);
+                        _context.prev = 30;
+                        _context.next = 33;
+                        return interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method);
+
+                    case 33:
                         interfaceData = _context.sent;
 
                         if (!(!interfaceData || interfaceData.length === 0)) {
-                            _context.next = 35;
+                            _context.next = 40;
                             break;
                         }
 
                         if (!(ctx.method === 'OPTIONS')) {
-                            _context.next = 34;
+                            _context.next = 39;
                             break;
                         }
 
@@ -121,54 +119,54 @@ module.exports = function () {
                         ctx.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
                         return _context.abrupt('return', ctx.body = 'ok');
 
-                    case 34:
+                    case 39:
                         return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 404, '不存在的api'));
 
-                    case 35:
+                    case 40:
                         if (!(interfaceData.length > 1)) {
-                            _context.next = 37;
+                            _context.next = 42;
                             break;
                         }
 
                         return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 405, '存在多个api,请检查数据库'));
 
-                    case 37:
+                    case 42:
 
                         interfaceData = interfaceData[0];
                         ctx.set("Access-Control-Allow-Origin", "*");
 
                         if (!(interfaceData.res_body_type === 'json')) {
-                            _context.next = 48;
+                            _context.next = 53;
                             break;
                         }
 
-                        _context.prev = 40;
+                        _context.prev = 45;
                         res = _mockjs2.default.mock(_yapi2.default.commons.json_parse(interfaceData.res_body));
                         return _context.abrupt('return', ctx.body = res);
 
-                    case 45:
-                        _context.prev = 45;
-                        _context.t1 = _context['catch'](40);
+                    case 50:
+                        _context.prev = 50;
+                        _context.t1 = _context['catch'](45);
                         return _context.abrupt('return', ctx.body = {
                             errcode: 400,
                             errmsg: 'mock json数据格式有误',
                             data: interfaceData.res_body
                         });
 
-                    case 48:
+                    case 53:
                         return _context.abrupt('return', ctx.body = interfaceData.res_body);
 
-                    case 51:
-                        _context.prev = 51;
-                        _context.t2 = _context['catch'](25);
+                    case 56:
+                        _context.prev = 56;
+                        _context.t2 = _context['catch'](30);
                         return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 409, _context.t2.message));
 
-                    case 54:
+                    case 59:
                     case 'end':
                         return _context.stop();
                 }
             }
-        }, _callee, undefined, [[10, 16], [25, 51], [40, 45]]);
+        }, _callee, undefined, [[17, 23], [30, 56], [45, 50]]);
     }));
 
     return function (_x, _x2) {
diff --git a/server_dist/utils/db.js b/server_dist/utils/db.js
index 21aae9bd..0f95f066 100644
--- a/server_dist/utils/db.js
+++ b/server_dist/utils/db.js
@@ -30,7 +30,7 @@ function connect() {
     var config = _yapi2.default.WEBCONFIG;
     var options = {};
 
-    if (config.user) {
+    if (config.db.user) {
         options.user = config.db.user;
         options.pass = config.db.pass;
     }