/*
title: Combine-Separate Morphing
category: custom
titleCN: 聚合分割形变
difficulty: 11
*/



var PIE_COLORS = [
    '#e06343', '#37a354', '#b55dba', '#b5bd48', '#8378EA', '#96BFFF'
];
var CLUSTER_COLORS = [
    '#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'
];
var Z_TAG_COLORS = [
    '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83',
    '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'
];
var Z_TAG_COLORS_2 = [
    '#51689b', '#ce5c5c', '#fbc357', '#8fbf8f', '#659d84', '#fb8e6a', '#c77288', '#786090',
    '#91c4c5', '#6890ba'
];
var SYMBOL_PATHS = [
    'path://m67.25,28.9c27.42,-69.1 134.84,0 0,88.85c-134.84,-88.85 -27.42,-157.96 0,-88.85z',
    'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM10 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM16 28c-5.215 0-9.544-4.371-10-9.947 2.93 1.691 6.377 2.658 10 2.658s7.070-0.963 10-2.654c-0.455 5.576-4.785 9.942-10 9.942z',
    'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16c8.837 0 16-7.163 16-16s-7.163-16-16-16zM22 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.192-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.050 0.301-0.311 0.522-0.616 0.522-0 0 0 0-0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM10 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.193-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.051 0.301-0.311 0.522-0.616 0.522 0 0 0 0 0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM6 18h6v7.745c-3.44-0.894-6-4.035-6-7.745zM14 26v-8h4v8h-4zM20 25.745v-7.745h6c0 3.71-2.559 6.851-6 7.745z',
    'path://M23.6 2c4.637 0 8.4 3.764 8.4 8.401 0 9.132-9.87 11.964-15.999 21.232-6.485-9.326-16.001-11.799-16.001-21.232 0-4.637 3.763-8.401 8.4-8.401 1.886 0 3.625 0.86 5.025 2.12l-2.425 3.88 7 4-4 10 11-12-7-4 1.934-2.901c1.107-0.68 2.35-1.099 3.665-1.099z',
    'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z',
    'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z'
];
var CONTENT_COLOR = '#37A2DA';
var ANIMATION_DURATION_UPDATE = 1500;


var RAW_DATA = [[1425139200000,34,0.13,2,"MD","ZD","P0"],[1425225600000,28,0.71,1.5,"MB","ZD","P1"],[1425312000000,23,0.9,2.8,"MA","ZC","P2"],[1425398400000,21,0.58,6,"MB","ZC","P3"],[1425484800000,14,0.1,1.6,"MC","ZA","P4"],[1425571200000,21,0.6,7.7,"MC","ZA","P5"],[1425657600000,23,0.31,2.6,"MC","ZC","P6"],[1425744000000,34,0.74,2.4,"MD","ZE","P7"],[1425830400000,14,0.59,2.3,"MB","ZD","P8"],[1425916800000,18,0.85,5.1,"MB","ZB","P9"],[1426003200000,36,0.96,1.2,"MC","ZC","P10"],[1426089600000,18,0.28,2.5,"MA","ZC","P11"],[1426176000000,20,0.62,6,"MB","ZD","P12"],[1426262400000,32,0.79,1.7,"MB","ZA","P13"],[1426348800000,17,0.58,4.4,"MD","ZB","P14"],[1426435200000,23,0.77,3,"MB","ZA","P15"],[1426521600000,39,0.87,4.6,"MC","ZA","P16"],[1426608000000,15,0.7,6,"MB","ZC","P17"],[1426694400000,21,0.94,2.7,"MB","ZD","P18"],[1426780800000,28,0.48,4.5,"MC","ZC","P19"],[1426867200000,31,0.49,9.8,"MA","ZC","P20"],[1426953600000,27,0.87,7.7,"MB","ZB","P21"],[1427040000000,27,0.82,5.5,"MC","ZB","P22"],[1427126400000,11,0.53,2.7,"MD","ZC","P23"],[1427212800000,13,0.7,7.6,"MB","ZD","P24"],[1427299200000,39,0.99,4.8,"MB","ZD","P25"],[1427385600000,32,0.91,2.1,"MB","ZE","P26"],[1427472000000,20,0.97,5,"MB","ZA","P27"],[1427558400000,36,0.01,8.9,"MB","ZD","P28"],[1427644800000,22,0.08,9.2,"MB","ZE","P29"],[1427731200000,21,0.36,3.1,"MD","ZC","P30"],[1427817600000,11,0.15,5.8,"MD","ZB","P31"],[1427904000000,39,0.02,1.4,"MC","ZD","P32"],[1427990400000,20,0.86,8.7,"MB","ZD","P33"],[1428076800000,23,0.24,7.2,"MD","ZB","P34"],[1428163200000,12,0.06,2,"MD","ZB","P35"],[1428249600000,36,0.42,8.2,"MA","ZB","P36"],[1428336000000,17,0.48,7.5,"MB","ZC","P37"],[1428422400000,19,0.12,6.6,"MB","ZB","P38"],[1428508800000,39,0.58,3.1,"MC","ZE","P39"],[1428595200000,10,0.18,6.6,"MC","ZD","P40"],[1428681600000,22,0.28,2.1,"MB","ZE","P41"],[1428768000000,27,0.33,1.9,"MC","ZB","P42"],[1428854400000,37,0.46,9.4,"MD","ZE","P43"],[1428940800000,18,0.96,5.5,"MB","ZA","P44"],[1429027200000,11,0.61,8.2,"MD","ZC","P45"],[1429113600000,15,0.88,4.6,"MD","ZA","P46"],[1429200000000,38,0.89,7.2,"MD","ZC","P47"],[1429286400000,20,0.39,5.4,"MB","ZB","P48"],[1429372800000,30,0.71,5.5,"MA","ZA","P49"]];

var RAW_DATA_DIMENSIONS = ['DATE', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID'];
var M_TAG_SUM_DIMENSIONS = ['ATA', 'STE', 'CTZ', 'M_TAG'];
var RAW_CLUSTER_DIMENSIONS = ['DATE', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE'];
var RAW_CLUSTER_CENTERS_DIMENSIONS = ['COUNT', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE'];

function getFromPalette(value, palette) {
    if (!palette.__colorMap) {
        palette.__colorMap = {};
    }
    if (palette.__colorIdx == null) {
        palette.__colorIdx = 0;
    }
    if (!palette.__colorMap[value]) {
        palette.__colorMap[value] = palette[palette.__colorIdx];
        palette.__colorIdx++;
        if (palette.__colorIdx >= palette.length) {
            palette.__colorIdx = 0;
        }
    }
    return palette.__colorMap[value];
}





var baseOption = {
    dataset: [{
        id: 'raw',
        dimensions: RAW_DATA_DIMENSIONS,
        source: RAW_DATA
    }, {
        id: 'mTagSum',
        fromDatasetId: 'raw',
        transform: {
            type: 'myTransform:aggregate',
            config: {
                resultDimensions: [
                    { from: 'ATA', method: 'sum' },
                    { from: 'STE', method: 'sum' },
                    { from: 'CTZ', method: 'sum' },
                    { from: 'M_TAG' }
                ],
                groupBy: 'M_TAG'
            }
        }
    }, {
        id: 'rawClusters',
        fromDatasetId: 'raw',
        transform: {
            type: 'ecStat:clustering',
            print: true,
            config: {
                clusterCount: 4,
                dimensions: ['ATA', 'STE'],
                outputClusterIndexDimension: {
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_IDX'),
                    name: 'CLUSTER_IDX'
                },
                outputCentroidDimensions: [{
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_ATA'),
                    name: 'CLUSTER_CENTER_ATA'
                }, {
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_STE'),
                    name: 'CLUSTER_CENTER_STE'
                }]
            }
        }
    }, {
        id: 'rawClusterCenters',
        fromDatasetId: 'rawClusters',
        transform: {
            type: 'myTransform:aggregate',
            print: true,
            config: {
                resultDimensions: [
                    { name: 'COUNT', from: 'ATA', method: 'count' },
                    { from: 'CLUSTER_CENTER_ATA' },
                    { from: 'CLUSTER_CENTER_STE' },
                    { from: 'CLUSTER_IDX' }
                ],
                groupBy: 'CLUSTER_IDX'
            }
        }
    }],
    tooltip: {}
};


function makeScatterOptionCreator(renderItem) {
    return function () {
        var datasetId = 'rawClusters';
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    name: 'STE'
                },
                yAxis: {
                    name: 'ATA'
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        itemName: 'ID',
                        x: 'STE',
                        y: 'ATA',
                        tooltip: ['STE', 'ATA']
                    },
                    renderItem: renderItem
                }
            }
        }
    };
}




var optionCreators = {

    'Scatter': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color = getFromPalette(zTagVal, Z_TAG_COLORS);
            return {
                type: 'circle',
                morph: true,
                shape: {
                    cx: pos[0],
                    cy: pos[1],
                    r: 10
                },
                style: {
                    fill: color
                },
                transition: ['shape', 'style']
            };
        }
    ),

    'Glyph': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color = getFromPalette(zTagVal, Z_TAG_COLORS);
            var symbolPath = getFromPalette(zTagVal, SYMBOL_PATHS);
            return {
                type: 'path',
                morph: true,
                x: pos[0],
                y: pos[1],
                shape: {
                    pathData: symbolPath,
                    width: 40,
                    height: 40
                },
                style: {
                    fill: color
                },
                transition: ['style']
            };
        }
    ),

    'House': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color1 = getFromPalette(zTagVal, Z_TAG_COLORS);
            var color2 = getFromPalette(zTagVal, Z_TAG_COLORS_2);
            return {
                type: 'group',
                x: pos[0],
                y: pos[1],
                children: [{
                    type: 'polygon',
                    morph: true,
                    shape: {
                        points: [
                            [-40, -2],
                            [40, -2],
                            [0, -35]
                        ]
                    },
                    style: {
                        fill: color1
                    },
                    transition: ['shape', 'style']
                }, {
                    type: 'rect',
                    morph: true,
                    shape: {
                        x: -20,
                        y: 0,
                        width: 40,
                        height: 30
                    },
                    style: {
                        fill: color2
                    },
                    transition: ['shape', 'style']
                }]
            };
        }
    ),

    'Bar_Sum': function () {
        var datasetId = 'mTagSum'
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    type: 'category'
                },
                yAxis: {
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        x: 'M_TAG',
                        y: 'ATA',
                        tooltip: ['M_TAG', 'ATA']
                    },
                    renderItem: function (params, api) {
                        var mTagVal = api.value('M_TAG');
                        var ataVal = api.value('ATA');
                        var tarPos = api.coord([mTagVal, ataVal]);
                        var zeroPos = api.coord([mTagVal, 0]);
                        var size = api.size([mTagVal, ataVal]);
                        var width = size[0] * 0.4;
                        return {
                            type: 'rect',
                            morph: true,
                            shape: {
                                x: tarPos[0] - width / 2,
                                y: tarPos[1],
                                height: zeroPos[1] - tarPos[1],
                                width: width,
                            },
                            style: {
                                fill: CONTENT_COLOR
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    },

    'Pie_Sum': function () {
        var datasetId = 'mTagSum';
        return {
            datasetId: datasetId,
            option: {
                series: {
                    type: 'custom',
                    coordinateSystem: 'none',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        itemName: 'M_TAG',
                        value: 'ATA',
                        tooltip: 'ATA'
                    },
                    renderItem: function (params, api) {
                        var context = params.context;
                        if (!context.layout) {
                            context.layout = true;
                            var totalValue = 0;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                totalValue += api.value('ATA', i);
                            }
                            var angles = [];
                            var colors = [];
                            var currentAngle = -Math.PI / 2;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                colors.push(PIE_COLORS[i]);
                                var angle = api.value('ATA', i) / totalValue * Math.PI * 2;
                                angles.push([currentAngle, angle + currentAngle - 0.01]);
                                currentAngle += angle;
                            }
                            context.angles = angles;
                            context.colors = colors;
                        }

                        var width = myChart.getWidth();
                        var height = myChart.getHeight();
                        return {
                            type: 'sector',
                            morph: true,
                            shape: {
                                cx: width / 2,
                                cy: height / 2,
                                r: Math.min(width, height) / 3,
                                r0: Math.min(width, height) / 5,
                                startAngle: context.angles[params.dataIndex][0],
                                endAngle: context.angles[params.dataIndex][1],
                                clockwise: true
                            },
                            style: {
                                // fill: CONTENT_COLOR,
                                fill: context.colors[params.dataIndex]
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    },

    'Clustered': function () {
        var datasetId = 'rawClusterCenters';
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    name: 'STE'
                },
                yAxis: {
                    name: 'ATA'
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        x: 'CLUSTER_CENTER_STE',
                        y: 'CLUSTER_CENTER_ATA',
                        tooltip: ['CLUSTER_CENTER_STE', 'CLUSTER_CENTER_ATA']
                    },
                    renderItem: function (params, api) {
                        var context = params.context;
                        if (!context.layout) {
                            context.layout = true;
                            context.totalCount = 0;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                context.totalCount += api.value('COUNT', i);
                            }
                        }

                        var pos = api.coord([
                            api.value('CLUSTER_CENTER_STE'),
                            api.value('CLUSTER_CENTER_ATA')
                        ]);
                        var count = api.value('COUNT');
                        var radius = count / context.totalCount * 100 + 10;
                        return {
                            type: 'circle',
                            morph: true,
                            shape: {
                                cx: pos[0],
                                cy: pos[1],
                                r: radius,
                            },
                            style: {
                                // fill: CONTENT_COLOR,
                                fill: CLUSTER_COLORS[params.dataIndex]
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    }
};



var _player;
var _optionList = [];
app.config = {};
echarts.util.each(optionCreators, function (creator, key) {
    var optionWrap = creator();
    _optionList.push({
        key: key,
        dataMetaKey: optionWrap.datasetId,
        option: optionWrap.option
    });
    app.config[key] = function () {
        _player.go(key);
    }
});
console.log(app.config);



var _global = {};
$.get(ROOT_PATH + '/data/asset/js/myTransform.js', function (aggregateJS) {
    (new Function(aggregateJS)).call(_global);

    $.get(ROOT_PATH + '/data/asset/js/transitionPlayer.js', function (transitionPlayerJS) {
        (new Function(transitionPlayerJS)).call(_global);

        run();
    });
});

function run() {

    echarts.registerTransform(_global.myTransform.aggregate);
    echarts.registerTransform(ecStat.transform.clustering);

    _player = _global.transitionPlayer.create({
        chart: function () {
            return myChart;
        },
        seriesIndex: 0,
        replaceMerge: ['xAxis', 'yAxis'],
        dataMeta: {
            raw: {
                dimensions: RAW_DATA_DIMENSIONS,
                uniqueDimension: 'ID'
            },
            mTagSum: {
                dimensions: M_TAG_SUM_DIMENSIONS,
                uniqueDimension: 'M_TAG'
            },
            rawClusters: {
                dimensions: RAW_CLUSTER_DIMENSIONS,
                uniqueDimension: 'ID',
                dividingMethod: 'duplicate'
            },
            rawClusterCenters: {
                dimensions: RAW_CLUSTER_CENTERS_DIMENSIONS,
                uniqueDimension: 'CLUSTER_IDX'
            }
        },
        optionList: _optionList
    });

    myChart.setOption(baseOption, { lazyUpdate: true });

    _player.go('Glyph');

}



