Subversion Repository Public Repository

Nextrek

1
{"uid":"CE4F231B812401459218A74604DDF88C533C","isLoaded":true,"lastModificationTime":0,"items":{"name":"Component_DataGridBehavior","type":"game_script","order":20,"content":"# ===================================================================\n#\n#   Script: Component_DataGridBehavior\n#\n#   $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_DataGridBehavior extends gs.Component_Visual\n    class DataWrapper\n        constructor: (data) ->\n            @data = data\n            @viewData = [yes, no, no, yes, no]\n    \n    class DataSource\n        constructor: (source) ->\n            @source = source || []\n            @length = @source.length\n            @wrappedSource = new Array(@source.length)\n            @wrappedSource[i] = null for i in [0..@wrappedSource.length]\n                \n        set: (source) ->\n            @source = source || []\n            @length = @source.length\n            @wrappedSource = new Array(@source.length)\n            @wrappedSource[i] = null for i in [0..@wrappedSource.length]\n            \n        itemAt: (index) ->\n            item = @wrappedSource[index]\n            if !item\n                item = new DataWrapper(@source[index])\n                @wrappedSource[index] = item\n                \n            return item\n    \n        setItemAt:(index, data) ->\n            if @wrappedSource[index]\n                @wrappedSource[index].data = data\n            @source[index] = data\n            \n    @accessors \"dataSource\", \n        set: (v) ->\n            if v != @dataSource_.source\n                @dataSource_.set(v)\n                @resize()\n        get: -> @dataSource_\n        \n    ###*\n    * Called if this object instance is restored from a data-bundle. It can be used\n    * re-assign event-handler, anonymous functions, etc.\n    * \n    * @method onDataBundleRestore.\n    * @param Object data - The data-bundle\n    * @param gs.ObjectCodecContext context - The codec-context.\n    ###\n    onDataBundleRestore: (data, context) ->\n        @setupEventHandlers()\n        \n    ###*\n    * The data-grid behavior component defines the logic for a data-grid. A data-grid\n    * allows to display items from a associated data-source using a specified\n    * item-template. Unlike a stack-layout, a data-grid is optimized to display even high amounts of items but they all\n    * need to use the same item-template with same size.\n    *\n    * @module ui\n    * @class Component_DataGridBehavior\n    * @extends gs.Component_Visual\n    * @memberof ui\n    * @constructor\n    * @params {Object} params - The params-object containing the data-grid settings.\n    ###\n    constructor: (params) ->\n        super()\n        @params = params || {}\n        ###*\n        * The item-template descriptor used for each item of the data-grid.\n        * @property template\n        * @type Object\n        ###\n        @template = @params.template\n        \n        ###*\n        * The data-source used for the data-grid. Can be an array or a formula.\n        * @property dataSource\n        * @type Object[]|string\n        ###\n        @dataSource_ = null\n        \n        ###*\n        * Stores the item-objects needed for rendering. They are created from the item-template.\n        * @property items\n        * @protected\n        * @type gs.Object_Base[]\n        ###\n        @items = @params.items || []\n        \n        ###*\n        * Numbers of columns.\n        * @property columns\n        * @type number\n        ###\n        @columns = @params.columns || 1\n        \n        ###*\n        * Indicates if the data-grid is initialized and ready for rendering.\n        * @property initialized\n        * @protected\n        * @type boolean\n        ###\n        @initialized = no\n        \n        ###*\n        * Defines a horizontal and vertical spacing between items.\n        * @property spacing\n        * @default [0, 10]        \n        * @type number[]\n        ###\n        @spacing = @params.spacing || [0, 0]\n     \n    ###*\n    * Adds event-handlers for mouse/touch events\n    *\n    * @method setupEventHandlers\n    ### \n    setupEventHandlers: ->\n        gs.GlobalEventManager.on \"mouseWheel\", =>\n            r = @object.dstRect\n            \n            if Rect.contains(r.x, r.y, r.width, r.height, Input.Mouse.x - @object.origin.x, Input.Mouse.y - @object.origin.y)\n                @updateScroll()\n    \n    ###*\n    * Sets up the data-grid.\n    *\n    * @method setup\n    ###   \n    setup: ->\n        if @object.dstRect.width == 1 then return\n        @initialized = yes\n\n        if !@template.size\n            item = ui.UIManager.createControlFromDescriptor(@template.descriptor, @object)\n            item.index = 0\n            item.update()\n            @template.size = [item.dstRect.width, item.dstRect.height]\n            item.dispose()\n            \n        if @params.dataSource.exec\n            @dataSource_ = new DataSource(ui.Component_FormulaHandler.fieldValue(@object, @params.dataSource) || [])\n        else\n            @dataSource_ = new DataSource(@params.dataSource || [])\n        \n        @resize()\n        \n        @setupEventHandlers()\n                \n        super()\n        \n    ###*\n    * Updates scrolling.\n    *\n    * @method updateScroll\n    ###\n    updateScroll: ->\n        @object.scrollableHeight = Math.max(0, @object.contentHeight - @object.dstRect.height)\n        if Input.Mouse.wheel <= -1\n            @object.scrollOffsetY = Math.max(@object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, 0)\n           \n        if Input.Mouse.wheel >= 1\n            @object.scrollOffsetY = Math.min(@object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, @object.scrollableHeight)\n            \n    \n        @object.scrollOffsetY = Math.max(Math.min(@object.scrollOffsetY, @object.scrollableHeight), 0)\n         \n    ###*\n    * Resizes the data-grid and creates the necessary display objects from the data-grid template.\n    *\n    * @method resize\n    ###     \n    resize: ->\n        width = @object.dstRect.width\n        height = @object.dstRect.height\n        \n        itemsX = @columns || 1\n        itemsY = Math.ceil((height-@spacing[1]) / (@template.size[1]+@spacing[1])) + @columns+1\n        totalItemsY = Math.ceil(@dataSource.length / @columns)\n        \n        item?.dispose() for item in @items\n        @items = [] #new Array(itemsX * itemsY)\n        \n        for y in [0...itemsY]\n            for x in [0...itemsX]\n                index  = y * itemsX + x\n                if index < @dataSource.length\n                    item = ui.UIManager.createControlFromDescriptor(@template.descriptor, @object)\n\n                    item.data[0] = @dataSource.itemAt(index).data                    \n                    item.dstRect.x = @spacing[0] + x * (@template.size[0]+@spacing[0])\n                    item.dstRect.y = @spacing[1] + y * (@template.size[1]+@spacing[1])\n                    item.dstRect.width = @template.size[0]\n                    item.dstRect.height = @template.size[1]\n                    item.index = index\n                    item.ui.viewData = @dataSource.itemAt(index).viewData\n                    \n                    @items[item.index] = item\n                    @object.addObject(item)\n                \n        @object.scrollableHeight = @spacing[1] + totalItemsY * (@template.size[1]+@spacing[1]) - height\n        @object.scrollOffsetY = 0\n        @object.contentHeight = @spacing[1] + totalItemsY * (@template.size[1]+@spacing[1])\n\n    itemAtIndex: (index) ->\n        @items.first (item) -> item.index == index\n        \n    indexForItem: (item) -> item.index\n        \n    ###*\n    * Updates the data-grid.\n    *\n    * @method update\n    ###  \n    update: ->\n        super()\n        \n        if not @initialized\n            @setup()\n        \n        scrollOffset = @object.scrollOffsetY\n        offset = Math.floor((scrollOffset) / (@template.size[1]+@spacing[1])) * @columns\n        i = offset\n        itemIndex = 0\n        itemsY = Math.ceil((@object.dstRect.height-@spacing[1]) /  (@template.size[1]+@spacing[1])) * @columns + @columns+1\n        \n        while i < Math.min(offset+itemsY, @dataSource.length)\n            row = Math.floor(i / @columns)\n            column = i % @columns\n            item = @items[itemIndex]\n            if item\n                item.data[0] = @dataSource.itemAt(i).data\n                if @object.clipRect\n                    item.clipRect = @object.clipRect\n                item.index = i\n                item.ui.viewData = @dataSource.itemAt(i).viewData\n                item.dstRect.x = @spacing[0] + column * (@template.size[0]+@spacing[0])\n                item.dstRect.y = @spacing[1] + (row-(offset/@columns)) * (@template.size[1]+@spacing[1]) + (-scrollOffset % (@template.size[1]+@spacing[1]))\n                item.visible = yes\n                item.update()\n                item.update()\n                itemIndex++\n              \n            i++\n        \n        for j in [itemIndex...@items.length]\n            if @items[j]\n                @items[j].visible = no\n                @items[j].update()\n        \n        \n        \nui.Component_DataGridBehavior = Component_DataGridBehavior","parentId":"01A95DA3K01E8A4CB4SBE17E790BCE1FC035","folder":false,"compiledContent":"var Component_DataGridBehavior,\n  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\nComponent_DataGridBehavior = (function(superClass) {\n  var DataSource, DataWrapper;\n\n  extend(Component_DataGridBehavior, superClass);\n\n  DataWrapper = (function() {\n    function DataWrapper(data) {\n      this.data = data;\n      this.viewData = [true, false, false, true, false];\n    }\n\n    return DataWrapper;\n\n  })();\n\n  DataSource = (function() {\n    function DataSource(source) {\n      var i, k, ref;\n      this.source = source || [];\n      this.length = this.source.length;\n      this.wrappedSource = new Array(this.source.length);\n      for (i = k = 0, ref = this.wrappedSource.length; 0 <= ref ? k <= ref : k >= ref; i = 0 <= ref ? ++k : --k) {\n        this.wrappedSource[i] = null;\n      }\n    }\n\n    DataSource.prototype.set = function(source) {\n      var i, k, ref, results;\n      this.source = source || [];\n      this.length = this.source.length;\n      this.wrappedSource = new Array(this.source.length);\n      results = [];\n      for (i = k = 0, ref = this.wrappedSource.length; 0 <= ref ? k <= ref : k >= ref; i = 0 <= ref ? ++k : --k) {\n        results.push(this.wrappedSource[i] = null);\n      }\n      return results;\n    };\n\n    DataSource.prototype.itemAt = function(index) {\n      var item;\n      item = this.wrappedSource[index];\n      if (!item) {\n        item = new DataWrapper(this.source[index]);\n        this.wrappedSource[index] = item;\n      }\n      return item;\n    };\n\n    DataSource.prototype.setItemAt = function(index, data) {\n      if (this.wrappedSource[index]) {\n        this.wrappedSource[index].data = data;\n      }\n      return this.source[index] = data;\n    };\n\n    return DataSource;\n\n  })();\n\n  Component_DataGridBehavior.accessors(\"dataSource\", {\n    set: function(v) {\n      if (v !== this.dataSource_.source) {\n        this.dataSource_.set(v);\n        return this.resize();\n      }\n    },\n    get: function() {\n      return this.dataSource_;\n    }\n  });\n\n\n  /**\n  * Called if this object instance is restored from a data-bundle. It can be used\n  * re-assign event-handler, anonymous functions, etc.\n  * \n  * @method onDataBundleRestore.\n  * @param Object data - The data-bundle\n  * @param gs.ObjectCodecContext context - The codec-context.\n   */\n\n  Component_DataGridBehavior.prototype.onDataBundleRestore = function(data, context) {\n    return this.setupEventHandlers();\n  };\n\n\n  /**\n  * The data-grid behavior component defines the logic for a data-grid. A data-grid\n  * allows to display items from a associated data-source using a specified\n  * item-template. Unlike a stack-layout, a data-grid is optimized to display even high amounts of items but they all\n  * need to use the same item-template with same size.\n  *\n  * @module ui\n  * @class Component_DataGridBehavior\n  * @extends gs.Component_Visual\n  * @memberof ui\n  * @constructor\n  * @params {Object} params - The params-object containing the data-grid settings.\n   */\n\n  function Component_DataGridBehavior(params) {\n    Component_DataGridBehavior.__super__.constructor.call(this);\n    this.params = params || {};\n\n    /**\n    * The item-template descriptor used for each item of the data-grid.\n    * @property template\n    * @type Object\n     */\n    this.template = this.params.template;\n\n    /**\n    * The data-source used for the data-grid. Can be an array or a formula.\n    * @property dataSource\n    * @type Object[]|string\n     */\n    this.dataSource_ = null;\n\n    /**\n    * Stores the item-objects needed for rendering. They are created from the item-template.\n    * @property items\n    * @protected\n    * @type gs.Object_Base[]\n     */\n    this.items = this.params.items || [];\n\n    /**\n    * Numbers of columns.\n    * @property columns\n    * @type number\n     */\n    this.columns = this.params.columns || 1;\n\n    /**\n    * Indicates if the data-grid is initialized and ready for rendering.\n    * @property initialized\n    * @protected\n    * @type boolean\n     */\n    this.initialized = false;\n\n    /**\n    * Defines a horizontal and vertical spacing between items.\n    * @property spacing\n    * @default [0, 10]        \n    * @type number[]\n     */\n    this.spacing = this.params.spacing || [0, 0];\n  }\n\n\n  /**\n  * Adds event-handlers for mouse/touch events\n  *\n  * @method setupEventHandlers\n   */\n\n  Component_DataGridBehavior.prototype.setupEventHandlers = function() {\n    return gs.GlobalEventManager.on(\"mouseWheel\", (function(_this) {\n      return function() {\n        var r;\n        r = _this.object.dstRect;\n        if (Rect.contains(r.x, r.y, r.width, r.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y)) {\n          return _this.updateScroll();\n        }\n      };\n    })(this));\n  };\n\n\n  /**\n  * Sets up the data-grid.\n  *\n  * @method setup\n   */\n\n  Component_DataGridBehavior.prototype.setup = function() {\n    var item;\n    if (this.object.dstRect.width === 1) {\n      return;\n    }\n    this.initialized = true;\n    if (!this.template.size) {\n      item = ui.UIManager.createControlFromDescriptor(this.template.descriptor, this.object);\n      item.index = 0;\n      item.update();\n      this.template.size = [item.dstRect.width, item.dstRect.height];\n      item.dispose();\n    }\n    if (this.params.dataSource.exec) {\n      this.dataSource_ = new DataSource(ui.Component_FormulaHandler.fieldValue(this.object, this.params.dataSource) || []);\n    } else {\n      this.dataSource_ = new DataSource(this.params.dataSource || []);\n    }\n    this.resize();\n    this.setupEventHandlers();\n    return Component_DataGridBehavior.__super__.setup.call(this);\n  };\n\n\n  /**\n  * Updates scrolling.\n  *\n  * @method updateScroll\n   */\n\n  Component_DataGridBehavior.prototype.updateScroll = function() {\n    this.object.scrollableHeight = Math.max(0, this.object.contentHeight - this.object.dstRect.height);\n    if (Input.Mouse.wheel <= -1) {\n      this.object.scrollOffsetY = Math.max(this.object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, 0);\n    }\n    if (Input.Mouse.wheel >= 1) {\n      this.object.scrollOffsetY = Math.min(this.object.scrollOffsetY - Input.Mouse.wheelSpeed * 0.1, this.object.scrollableHeight);\n    }\n    return this.object.scrollOffsetY = Math.max(Math.min(this.object.scrollOffsetY, this.object.scrollableHeight), 0);\n  };\n\n\n  /**\n  * Resizes the data-grid and creates the necessary display objects from the data-grid template.\n  *\n  * @method resize\n   */\n\n  Component_DataGridBehavior.prototype.resize = function() {\n    var height, index, item, itemsX, itemsY, k, l, len, m, ref, ref1, ref2, totalItemsY, width, x, y;\n    width = this.object.dstRect.width;\n    height = this.object.dstRect.height;\n    itemsX = this.columns || 1;\n    itemsY = Math.ceil((height - this.spacing[1]) / (this.template.size[1] + this.spacing[1])) + this.columns + 1;\n    totalItemsY = Math.ceil(this.dataSource.length / this.columns);\n    ref = this.items;\n    for (k = 0, len = ref.length; k < len; k++) {\n      item = ref[k];\n      if (item != null) {\n        item.dispose();\n      }\n    }\n    this.items = [];\n    for (y = l = 0, ref1 = itemsY; 0 <= ref1 ? l < ref1 : l > ref1; y = 0 <= ref1 ? ++l : --l) {\n      for (x = m = 0, ref2 = itemsX; 0 <= ref2 ? m < ref2 : m > ref2; x = 0 <= ref2 ? ++m : --m) {\n        index = y * itemsX + x;\n        if (index < this.dataSource.length) {\n          item = ui.UIManager.createControlFromDescriptor(this.template.descriptor, this.object);\n          item.data[0] = this.dataSource.itemAt(index).data;\n          item.dstRect.x = this.spacing[0] + x * (this.template.size[0] + this.spacing[0]);\n          item.dstRect.y = this.spacing[1] + y * (this.template.size[1] + this.spacing[1]);\n          item.dstRect.width = this.template.size[0];\n          item.dstRect.height = this.template.size[1];\n          item.index = index;\n          item.ui.viewData = this.dataSource.itemAt(index).viewData;\n          this.items[item.index] = item;\n          this.object.addObject(item);\n        }\n      }\n    }\n    this.object.scrollableHeight = this.spacing[1] + totalItemsY * (this.template.size[1] + this.spacing[1]) - height;\n    this.object.scrollOffsetY = 0;\n    return this.object.contentHeight = this.spacing[1] + totalItemsY * (this.template.size[1] + this.spacing[1]);\n  };\n\n  Component_DataGridBehavior.prototype.itemAtIndex = function(index) {\n    return this.items.first(function(item) {\n      return item.index === index;\n    });\n  };\n\n  Component_DataGridBehavior.prototype.indexForItem = function(item) {\n    return item.index;\n  };\n\n\n  /**\n  * Updates the data-grid.\n  *\n  * @method update\n   */\n\n  Component_DataGridBehavior.prototype.update = function() {\n    var column, i, item, itemIndex, itemsY, j, k, offset, ref, ref1, results, row, scrollOffset;\n    Component_DataGridBehavior.__super__.update.call(this);\n    if (!this.initialized) {\n      this.setup();\n    }\n    scrollOffset = this.object.scrollOffsetY;\n    offset = Math.floor(scrollOffset / (this.template.size[1] + this.spacing[1])) * this.columns;\n    i = offset;\n    itemIndex = 0;\n    itemsY = Math.ceil((this.object.dstRect.height - this.spacing[1]) / (this.template.size[1] + this.spacing[1])) * this.columns + this.columns + 1;\n    while (i < Math.min(offset + itemsY, this.dataSource.length)) {\n      row = Math.floor(i / this.columns);\n      column = i % this.columns;\n      item = this.items[itemIndex];\n      if (item) {\n        item.data[0] = this.dataSource.itemAt(i).data;\n        if (this.object.clipRect) {\n          item.clipRect = this.object.clipRect;\n        }\n        item.index = i;\n        item.ui.viewData = this.dataSource.itemAt(i).viewData;\n        item.dstRect.x = this.spacing[0] + column * (this.template.size[0] + this.spacing[0]);\n        item.dstRect.y = this.spacing[1] + (row - (offset / this.columns)) * (this.template.size[1] + this.spacing[1]) + (-scrollOffset % (this.template.size[1] + this.spacing[1]));\n        item.visible = true;\n        item.update();\n        item.update();\n        itemIndex++;\n      }\n      i++;\n    }\n    results = [];\n    for (j = k = ref = itemIndex, ref1 = this.items.length; ref <= ref1 ? k < ref1 : k > ref1; j = ref <= ref1 ? ++k : --k) {\n      if (this.items[j]) {\n        this.items[j].visible = false;\n        results.push(this.items[j].update());\n      } else {\n        results.push(void 0);\n      }\n    }\n    return results;\n  };\n\n  return Component_DataGridBehavior;\n\n})(gs.Component_Visual);\n\nui.Component_DataGridBehavior = Component_DataGridBehavior;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsMEJBQUE7RUFBQTs7O0FBQU07QUFDRixNQUFBOzs7O0VBQU07SUFDVyxxQkFBQyxJQUFEO01BQ1QsSUFBQyxDQUFBLElBQUQsR0FBUTtNQUNSLElBQUMsQ0FBQSxRQUFELEdBQVksQ0FBQyxJQUFELEVBQU0sS0FBTixFQUFVLEtBQVYsRUFBYyxJQUFkLEVBQW1CLEtBQW5CO0lBRkg7Ozs7OztFQUlYO0lBQ1csb0JBQUMsTUFBRDtBQUNULFVBQUE7TUFBQSxJQUFDLENBQUEsTUFBRCxHQUFVLE1BQUEsSUFBVTtNQUNwQixJQUFDLENBQUEsTUFBRCxHQUFVLElBQUMsQ0FBQSxNQUFNLENBQUM7TUFDbEIsSUFBQyxDQUFBLGFBQUQsR0FBcUIsSUFBQSxLQUFBLENBQU0sSUFBQyxDQUFBLE1BQU0sQ0FBQyxNQUFkO0FBQ3JCLFdBQWtDLG9HQUFsQztRQUFBLElBQUMsQ0FBQSxhQUFjLENBQUEsQ0FBQSxDQUFmLEdBQW9CO0FBQXBCO0lBSlM7O3lCQU1iLEdBQUEsR0FBSyxTQUFDLE1BQUQ7QUFDRCxVQUFBO01BQUEsSUFBQyxDQUFBLE1BQUQsR0FBVSxNQUFBLElBQVU7TUFDcEIsSUFBQyxDQUFBLE1BQUQsR0FBVSxJQUFDLENBQUEsTUFBTSxDQUFDO01BQ2xCLElBQUMsQ0FBQSxhQUFELEdBQXFCLElBQUEsS0FBQSxDQUFNLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBZDtBQUNyQjtXQUFrQyxvR0FBbEM7cUJBQUEsSUFBQyxDQUFBLGFBQWMsQ0FBQSxDQUFBLENBQWYsR0FBb0I7QUFBcEI7O0lBSkM7O3lCQU1MLE1BQUEsR0FBUSxTQUFDLEtBQUQ7QUFDSixVQUFBO01BQUEsSUFBQSxHQUFPLElBQUMsQ0FBQSxhQUFjLENBQUEsS0FBQTtNQUN0QixJQUFHLENBQUMsSUFBSjtRQUNJLElBQUEsR0FBVyxJQUFBLFdBQUEsQ0FBWSxJQUFDLENBQUEsTUFB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PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9EYXRhR3JpZEJlaGF2aW9yXG4jXG4jICAgJCRDT1BZUklHSFQkJFxuI1xuIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5jbGFzcyBDb21wb25lbnRfRGF0YUdyaWRCZWhhdmlvciBleHRlbmRzIGdzLkNvbXBvbmVudF9WaXN1YWxcbiAgICBjbGFzcyBEYXRhV3JhcHBlclxuICAgICAgICBjb25zdHJ1Y3RvcjogKGRhdGEpIC0+XG4gICAgICAgICAgICBAZGF0YSA9IGRhdGFcbiAgICAgICAgICAgIEB2aWV3RGF0YSA9IFt5ZXMsIG5vLCBubywgeWVzLCBub11cbiAgICBcbiAgICBjbGFzcyBEYXRhU291cmNlXG4gICAgICAgIGNvbnN0cnVjdG9yOiAoc291cmNlKSAtPlxuICAgICAgICAgICAgQHNvdXJjZSA9IHNvdXJjZSB8fCBbXVxuICAgICAgICAgICAgQGxlbmd0aCA9IEBzb3VyY2UubGVuZ3RoXG4gICAgICAgICAgICBAd3JhcHBlZFNvdXJjZSA9IG5ldyBBcnJheShAc291cmNlLmxlbmd0aClcbiAgICAgICAgICAgIEB3cmFwcGVkU291cmNlW2ldID0gbnVsbCBmb3IgaSBpbiBbMC4uQHdyYXBwZWRTb3VyY2UubGVuZ3RoXVxuICAgICAgICAgICAgICAgIFxuICAgICAgICBzZXQ6IChzb3VyY2UpIC0+XG4gICAgICAgICAgICBAc291cmNlID0gc291cmNlIHx8IFtdXG4gICAgICAgICAgICBAbGVuZ3RoID0gQHNvdXJjZS5sZW5ndGhcbiAgICAgICAgICAgIEB3cmFwcGVkU291cmNlID0gbmV3IEFycmF5KEBzb3VyY2UubGVuZ3RoKVxuICAgICAgICAgICAgQHdyYXBwZWRTb3VyY2VbaV0gPSBudWxsIGZvciBpIGluIFswLi5Ad3JhcHBlZFNvdXJjZS5sZW5ndGhdXG4gICAgICAgICAgICBcbiAgICAgICAgaXRlbUF0OiAoaW5kZXgpIC0+XG4gICAgICAgICAgICBpdGVtID0gQHdyYXBwZWRTb3VyY2VbaW5kZXhdXG4gICAgICAgICAgICBpZiAhaXRlbVxuICAgICAgICAgICAgICAgIGl0ZW0gPSBuZXcgRGF0YVdyYXBwZXIoQHNvdXJjZVtpbmRleF0pXG4gICAgICAgICAgICAgICAgQHdyYXBwZWRTb3VyY2VbaW5kZXhdID0gaXRlbVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICBcbiAgICAgICAgc2V0SXRlbUF0OihpbmRleCwgZGF0YSkgLT5cbiAgICAgICAgICAgIGlmIEB3cmFwcGVkU291cmNlW2luZGV4XVxuICAgICAgICAgICAgICAgIEB3cmFwcGVkU291cmNlW2luZGV4XS5kYXRhID0gZGF0YVxuICAgICAgICAgICAgQHNvdXJjZVtpbmRleF0gPSBkYXRhXG4gICAgICAgICAgICBcbiAgICBAYWNjZXNzb3JzIFwiZGF0YVNvdXJjZVwiLCBcbiAgICAgICAgc2V0OiAodikgLT5cbiAgICAgICAgICAgIGlmIHYgIT0gQGRhdGFTb3VyY2VfLnNvdXJjZVxuICAgICAgICAgICAgICAgIEBkYXRhU291cmNlXy5zZXQodilcbiAgICAgICAgICAgICAgICBAcmVzaXplKClcbiAgICAgICAgZ2V0OiAtPiBAZGF0YVNvdXJjZV9cbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogQ2FsbGVkIGlmIHRoaXMgb2JqZWN0IGluc3RhbmNlIGlzIHJlc3RvcmVkIGZyb20gYSBkYXRhLWJ1bmRsZS4gSXQgY2FuIGJlIHVzZWRcbiAgICAqIHJlLWFzc2lnbiBldmVudC1oYW5kbGVyLCBhbm9ueW1vdXMgZnVuY3Rpb25zLCBldGMuXG4gICAgKiBcbiAgICAqIEBtZXRob2Qgb25EYXRhQnVuZGxlUmVzdG9yZS5cbiAgICAqIEBwYXJhbSBPYmplY3QgZGF0YSAtIFRoZSBkYXRhLWJ1bmRsZVxuICAgICogQHBhcmFtIGdzLk9iamVjdENvZGVjQ29udGV4dCBjb250ZXh0IC0gVGhlIGNvZGVjLWNvbnRleHQuXG4gICAgIyMjXG4gICAgb25EYXRhQnVuZGxlUmVzdG9yZTogKGRhdGEsIGNvbnRleHQpIC0+XG4gICAgICAgIEBzZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBUaGUgZGF0YS1ncmlkIGJlaGF2aW9yIGNvbXBvbmVudCBkZWZpbmVzIHRoZSBsb2dpYyBmb3IgYSBkYXRhLWdyaWQuIEEgZGF0YS1ncmlkXG4gICAgKiBhbGxvd3MgdG8gZGlzcGxheSBpdGVtcyBmcm9tIGEgYXNzb2NpYXRlZCBkYXRhLXNvdXJjZSB1c2luZyBhIHNwZWNpZmllZFxuICAgICogaXRlbS10ZW1wbGF0ZS4gVW5saWtlIGEgc3RhY2stbGF5b3V0LCBhIGRhdGEtZ3JpZCBpcyBvcHRpbWl6ZWQgdG8gZGlzcGxheSBldmVuIGhpZ2ggYW1vdW50cyBvZiBpdGVtcyBidXQgdGhleSBhbGxcbiAgICAqIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGl0ZW0tdGVtcGxhdGUgd2l0aCBzYW1lIHNpemUuXG4gICAgKlxuICAgICogQG1vZHVsZSB1aVxuICAgICogQGNsYXNzIENvbXBvbmVudF9EYXRhR3JpZEJlaGF2aW9yXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfVmlzdWFsXG4gICAgKiBAbWVtYmVyb2YgdWlcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHBhcmFtcyB7T2JqZWN0fSBwYXJhbXMgLSBUaGUgcGFyYW1zLW9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhLWdyaWQgc2V0dGluZ3MuXG4gICAgIyMjXG4gICAgY29uc3RydWN0b3I6IChwYXJhbXMpIC0+XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgQHBhcmFtcyA9IHBhcmFtcyB8fCB7fVxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGl0ZW0tdGVtcGxhdGUgZGVzY3JpcHRvciB1c2VkIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGRhdGEtZ3JpZC5cbiAgICAgICAgKiBAcHJvcGVydHkgdGVtcGxhdGVcbiAgICAgICAgKiBAdHlwZSBPYmplY3RcbiAgICAgICAgIyMjXG4gICAgICAgIEB0ZW1wbGF0ZSA9IEBwYXJhbXMudGVtcGxhdGVcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZGF0YS1zb3VyY2UgdXNlZCBmb3IgdGhlIGRhdGEtZ3JpZC4gQ2FuIGJlIGFuIGFycmF5IG9yIGEgZm9ybXVsYS5cbiAgICAgICAgKiBAcHJvcGVydHkgZGF0YVNvdXJjZVxuICAgICAgICAqIEB0eXBlIE9iamVjdFtdfHN0cmluZ1xuICAgICAgICAjIyNcbiAgICAgICAgQGRhdGFTb3VyY2VfID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFN0b3JlcyB0aGUgaXRlbS1vYmplY3RzIG5lZWRlZCBmb3IgcmVuZGVyaW5nLiBUaGV5IGFyZSBjcmVhdGVkIGZyb20gdGhlIGl0ZW0tdGVtcGxhdGUuXG4gICAgICAgICogQHByb3BlcnR5IGl0ZW1zXG4gICAgICAgICogQHByb3RlY3RlZFxuICAgICAgICAqIEB0eXBlIGdzLk9iamVjdF9CYXNlW11cbiAgICAgICAgIyMjXG4gICAgICAgIEBpdGVtcyA9IEBwYXJhbXMuaXRlbXMgfHwgW11cbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBOdW1iZXJzIG9mIGNvbHVtbnMuXG4gICAgICAgICogQHByb3BlcnR5IGNvbHVtbnNcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgIyMjXG4gICAgICAgIEBjb2x1bW5zID0gQHBhcmFtcy5jb2x1bW5zIHx8IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGRhdGEtZ3JpZCBpcyBpbml0aWFsaXplZCBhbmQgcmVhZHkgZm9yIHJlbmRlcmluZy5cbiAgICAgICAgKiBAcHJvcGVydHkgaW5pdGlhbGl6ZWRcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAjIyNcbiAgICAgICAgQGluaXRpYWxpemVkID0gbm9cbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBEZWZpbmVzIGEgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGl0ZW1zLlxuICAgICAgICAqIEBwcm9wZXJ0eSBzcGFjaW5nXG4gICAgICAgICogQGRlZmF1bHQgWzAsIDEwXSAgICAgICAgXG4gICAgICAgICogQHR5cGUgbnVtYmVyW11cbiAgICAgICAgIyMjXG4gICAgICAgIEBzcGFjaW5nID0gQHBhcmFtcy5zcGFjaW5nIHx8IFswLCAwXVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBBZGRzIGV2ZW50LWhhbmRsZXJzIGZvciBtb3VzZS90b3VjaCBldmVudHNcbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwRXZlbnRIYW5kbGVyc1xuICAgICMjIyBcbiAgICBzZXR1cEV2ZW50SGFuZGxlcnM6IC0+XG4gICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vbiBcIm1vdXNlV2hlZWxcIiwgPT5cbiAgICAgICAgICAgIHIgPSBAb2JqZWN0LmRzdFJlY3RcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgUmVjdC5jb250YWlucyhyLngsIHIueSwgci53aWR0aCwgci5oZWlnaHQsIElucHV0Lk1vdXNlLnggLSBAb2JqZWN0Lm9yaWdpbi54LCBJbnB1dC5Nb3VzZS55IC0gQG9iamVjdC5vcmlnaW4ueSlcbiAgICAgICAgICAgICAgICBAdXBkYXRlU2Nyb2xsKClcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTZXRzIHVwIHRoZSBkYXRhLWdyaWQuXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cFxuICAgICMjIyAgIFxuICAgIHNldHVwOiAtPlxuICAgICAgICBpZiBAb2JqZWN0LmRzdFJlY3Qud2lkdGggPT0gMSB0aGVuIHJldHVyblxuICAgICAgICBAaW5pdGlhbGl6ZWQgPSB5ZXNcblxuICAgICAgICBpZiAhQHRlbXBsYXRlLnNpemVcbiAgICAgICAgICAgIGl0ZW0gPSB1aS5VSU1hbmFnZXIuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKEB0ZW1wbGF0ZS5kZXNjcmlwdG9yLCBAb2JqZWN0KVxuICAgICAgICAgICAgaXRlbS5pbmRleCA9IDBcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlKClcbiAgICAgICAgICAgIEB0ZW1wbGF0ZS5zaXplID0gW2l0ZW0uZHN0UmVjdC53aWR0aCwgaXRlbS5kc3RSZWN0LmhlaWdodF1cbiAgICAgICAgICAgIGl0ZW0uZGlzcG9zZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgaWYgQHBhcmFtcy5kYXRhU291cmNlLmV4ZWNcbiAgICAgICAgICAgIEBkYXRhU291cmNlXyA9IG5ldyBEYXRhU291cmNlKHVpLkNvbXBvbmVudF9Gb3JtdWxhSGFuZGxlci5maWVsZFZhbHVlKEBvYmplY3QsIEBwYXJhbXMuZGF0YVNvdXJjZSkgfHwgW10pXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBkYXRhU291cmNlXyA9IG5ldyBEYXRhU291cmNlKEBwYXJhbXMuZGF0YVNvdXJjZSB8fCBbXSlcbiAgICAgICAgXG4gICAgICAgIEByZXNpemUoKVxuICAgICAgICBcbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyBzY3JvbGxpbmcuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVTY3JvbGxcbiAgICAjIyNcbiAgICB1cGRhdGVTY3JvbGw6IC0+XG4gICAgICAgIEBvYmplY3Quc2Nyb2xsYWJsZUhlaWdodCA9IE1hdGgubWF4KDAsIEBvYmplY3QuY29udGVudEhlaWdodCAtIEBvYmplY3QuZHN0UmVjdC5oZWlnaHQpXG4gICAgICAgIGlmIElucHV0Lk1vdXNlLndoZWVsIDw9IC0xXG4gICAgICAgICAgICBAb2JqZWN0LnNjcm9sbE9mZnNldFkgPSBNYXRoLm1heChAb2JqZWN0LnNjcm9sbE9mZnNldFkgLSBJbnB1dC5Nb3VzZS53aGVlbFNwZWVkICogMC4xLCAwKVxuICAgICAgICAgICBcbiAgICAgICAgaWYgSW5wdXQuTW91c2Uud2hlZWwgPj0gMVxuICAgICAgICAgICAgQG9iamVjdC5zY3JvbGxPZmZzZXRZID0gTWF0aC5taW4oQG9iamVjdC5zY3JvbGxPZmZzZXRZIC0gSW5wdXQuTW91c2Uud2hlZWxTcGVlZCAqIDAuMSwgQG9iamVjdC5zY3JvbGxhYmxlSGVpZ2h0KVxuICAgICAgICAgICAgXG4gICAgXG4gICAgICAgIEBvYmplY3Quc2Nyb2xsT2Zmc2V0WSA9IE1hdGgubWF4KE1hdGgubWluKEBvYmplY3Quc2Nyb2xsT2Zmc2V0WSwgQG9iamVjdC5zY3JvbGxhYmxlSGVpZ2h0KSwgMClcbiAgICAgICAgIFxuICAgICMjIypcbiAgICAqIFJlc2l6ZXMgdGhlIGRhdGEtZ3JpZCBhbmQgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5IGRpc3BsYXkgb2JqZWN0cyBmcm9tIHRoZSBkYXRhLWdyaWQgdGVtcGxhdGUuXG4gICAgKlxuICAgICogQG1ldGhvZCByZXNpemVcbiAgICAjIyMgICAgIFxuICAgIHJlc2l6ZTogLT5cbiAgICAgICAgd2lkdGggPSBAb2JqZWN0LmRzdFJlY3Qud2lkdGhcbiAgICAgICAgaGVpZ2h0ID0gQG9iamVjdC5kc3RSZWN0LmhlaWdodFxuICAgICAgICBcbiAgICAgICAgaXRlbXNYID0gQGNvbHVtbnMgfHwgMVxuICAgICAgICBpdGVtc1kgPSBNYXRoLmNlaWwoKGhlaWdodC1Ac3BhY2luZ1sxXSkgLyAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pKSArIEBjb2x1bW5zKzFcbiAgICAgICAgdG90YWxJdGVtc1kgPSBNYXRoLmNlaWwoQGRhdGFTb3VyY2UubGVuZ3RoIC8gQGNvbHVtbnMpXG4gICAgICAgIFxuICAgICAgICBpdGVtPy5kaXNwb3NlKCkgZm9yIGl0ZW0gaW4gQGl0ZW1zXG4gICAgICAgIEBpdGVtcyA9IFtdICNuZXcgQXJyYXkoaXRlbXNYICogaXRlbXNZKVxuICAgICAgICBcbiAgICAgICAgZm9yIHkgaW4gWzAuLi5pdGVtc1ldXG4gICAgICAgICAgICBmb3IgeCBpbiBbMC4uLml0ZW1zWF1cbiAgICAgICAgICAgICAgICBpbmRleCAgPSB5ICogaXRlbXNYICsgeFxuICAgICAgICAgICAgICAgIGlmIGluZGV4IDwgQGRhdGFTb3VyY2UubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB1aS5VSU1hbmFnZXIuY3JlYXRlQ29udHJvbEZyb21EZXNjcmlwdG9yKEB0ZW1wbGF0ZS5kZXNjcmlwdG9yLCBAb2JqZWN0KVxuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YVswXSA9IEBkYXRhU291cmNlLml0ZW1BdChpbmRleCkuZGF0YSAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZHN0UmVjdC54ID0gQHNwYWNpbmdbMF0gKyB4ICogKEB0ZW1wbGF0ZS5zaXplWzBdK0BzcGFjaW5nWzBdKVxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRzdFJlY3QueSA9IEBzcGFjaW5nWzFdICsgeSAqIChAdGVtcGxhdGUuc2l6ZVsxXStAc3BhY2luZ1sxXSlcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kc3RSZWN0LndpZHRoID0gQHRlbXBsYXRlLnNpemVbMF1cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kc3RSZWN0LmhlaWdodCA9IEB0ZW1wbGF0ZS5zaXplWzFdXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBpdGVtLnVpLnZpZXdEYXRhID0gQGRhdGFTb3VyY2UuaXRlbUF0KGluZGV4KS52aWV3RGF0YVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgQGl0ZW1zW2l0ZW0uaW5kZXhdID0gaXRlbVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmFkZE9iamVjdChpdGVtKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICBAb2JqZWN0LnNjcm9sbGFibGVIZWlnaHQgPSBAc3BhY2luZ1sxXSArIHRvdGFsSXRlbXNZICogKEB0ZW1wbGF0ZS5zaXplWzFdK0BzcGFjaW5nWzFdKSAtIGhlaWdodFxuICAgICAgICBAb2JqZWN0LnNjcm9sbE9mZnNldFkgPSAwXG4gICAgICAgIEBvYmplY3QuY29udGVudEhlaWdodCA9IEBzcGFjaW5nWzFdICsgdG90YWxJdGVtc1kgKiAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pXG5cbiAgICBpdGVtQXRJbmRleDogKGluZGV4KSAtPlxuICAgICAgICBAaXRlbXMuZmlyc3QgKGl0ZW0pIC0+IGl0ZW0uaW5kZXggPT0gaW5kZXhcbiAgICAgICAgXG4gICAgaW5kZXhGb3JJdGVtOiAoaXRlbSkgLT4gaXRlbS5pbmRleFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBkYXRhLWdyaWQuXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyMgIFxuICAgIHVwZGF0ZTogLT5cbiAgICAgICAgc3VwZXIoKVxuICAgICAgICBcbiAgICAgICAgaWYgbm90IEBpbml0aWFsaXplZFxuICAgICAgICAgICAgQHNldHVwKClcbiAgICAgICAgXG4gICAgICAgIHNjcm9sbE9mZnNldCA9IEBvYmplY3Quc2Nyb2xsT2Zmc2V0WVxuICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKChzY3JvbGxPZmZzZXQpIC8gKEB0ZW1wbGF0ZS5zaXplWzFdK0BzcGFjaW5nWzFdKSkgKiBAY29sdW1uc1xuICAgICAgICBpID0gb2Zmc2V0XG4gICAgICAgIGl0ZW1JbmRleCA9IDBcbiAgICAgICAgaXRlbXNZID0gTWF0aC5jZWlsKChAb2JqZWN0LmRzdFJlY3QuaGVpZ2h0LUBzcGFjaW5nWzFdKSAvICAoQHRlbXBsYXRlLnNpemVbMV0rQHNwYWNpbmdbMV0pKSAqIEBjb2x1bW5zICsgQGNvbHVtbnMrMVxuICAgICAgICBcbiAgICAgICAgd2hpbGUgaSA8IE1hdGgubWluKG9mZnNldCtpdGVtc1ksIEBkYXRhU291cmNlLmxlbmd0aClcbiAgICAgICAgICAgIHJvdyA9IE1hdGguZmxvb3IoaSAvIEBjb2x1bW5zKVxuICAgICAgICAgICAgY29sdW1uID0gaSAlIEBjb2x1bW5zXG4gICAgICAgICAgICBpdGVtID0gQGl0ZW1zW2l0ZW1JbmRleF1cbiAgICAgICAgICAgIGlmIGl0ZW1cbiAgICAgICAgICAgICAgICBpdGVtLmRhdGFbMF0gPSBAZGF0YVNvdXJjZS5pdGVtQXQoaSkuZGF0YVxuICAgICAgICAgICAgICAgIGlmIEBvYmplY3QuY2xpcFJlY3RcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jbGlwUmVjdCA9IEBvYmplY3QuY2xpcFJlY3RcbiAgICAgICAgICAgICAgICBpdGVtLmluZGV4ID0gaVxuICAgICAgICAgICAgICAgIGl0ZW0udWkudmlld0RhdGEgPSBAZGF0YVNvdXJjZS5pdGVtQXQoaSkudmlld0RhdGFcbiAgICAgICAgICAgICAgICBpdGVtLmRzdFJlY3QueCA9IEBzcGFjaW5nWzBdICsgY29sdW1uICogKEB0ZW1wbGF0ZS5zaXplWzBdK0BzcGFjaW5nWzBdKVxuICAgICAgICAgICAgICAgIGl0ZW0uZHN0UmVjdC55ID0gQHNwYWNpbmdbMV0gKyAocm93LShvZmZzZXQvQGNvbHVtbnMpKSAqIChAdGVtcGxhdGUuc2l6ZVsxXStAc3BhY2luZ1sxXSkgKyAoLXNjcm9sbE9mZnNldCAlIChAdGVtcGxhdGUuc2l6ZVsxXStAc3BhY2luZ1sxXSkpXG4gICAgICAgICAgICAgICAgaXRlbS52aXNpYmxlID0geWVzXG4gICAgICAgICAgICAgICAgaXRlbS51cGRhdGUoKVxuICAgICAgICAgICAgICAgIGl0ZW0udXBkYXRlKClcbiAgICAgICAgICAgICAgICBpdGVtSW5kZXgrK1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGkrK1xuICAgICAgICBcbiAgICAgICAgZm9yIGogaW4gW2l0ZW1JbmRleC4uLkBpdGVtcy5sZW5ndGhdXG4gICAgICAgICAgICBpZiBAaXRlbXNbal1cbiAgICAgICAgICAgICAgICBAaXRlbXNbal0udmlzaWJsZSA9IG5vXG4gICAgICAgICAgICAgICAgQGl0ZW1zW2pdLnVwZGF0ZSgpXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgXG51aS5Db21wb25lbnRfRGF0YUdyaWRCZWhhdmlvciA9IENvbXBvbmVudF9EYXRhR3JpZEJlaGF2aW9yIl19\n//# sourceURL=Component_DataGridBehavior_172.js"},"summary":["name","type"]}

Commits for Nextrek/s2s/data/CE4F231B812401459218A74604DDF88C533C.json

Diff revisions: vs.
Revision Author Commited Message
1084 MOliva picture MOliva Fri 11 May, 2018 12:41:55 +0000